问题整理记录

本文整理了Java开发中遇到的问题,包括Springboot打包lib目录处理、FastJson的0day漏洞防范、nginx配置错误及解决、Mybatis性能优化、Python调用Oracle数据库错误修复、Quartz与Spring整合问题、Redis和Tomcat调优、POST请求过大处理、Oracle本地服务访问问题以及前端样式缓存解决等。提供了解决方案和参考资料。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

------------------------------------------------------------------------------------------------------------------------------

Springboot打包把lib分开打,指定外部lib文件

    注:将lib下的文件放到jar包同级目录my-lib里面,然后启动指定lib目录位置

启动脚本:java -Dloader.path=./my-lib -jar map-resource.jar
pom配置:
	<plugins>
		<plugin>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-maven-plugin</artifactId>
			<configuration>
				<mainClass>com.hxtt.unicom.mapresource.MapResourceApplication</mainClass>
				<layout>ZIP</layout>
				<!--排除项目第三方依赖包-->
				<includes>
					<include>
						<groupId>nothing</groupId>
						<artifactId>nothing</artifactId>
					</include>
				</includes>
			</configuration>
			<executions>
				<execution>
					<goals>
						<goal>repackage</goal>
					</goals>
				</execution>
			</executions>
		</plugin>
		<!--打包依赖lib-->
		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-dependency-plugin</artifactId>
			<executions>
				<execution>
					<id>copy-dependencies</id>
					<phase>prepare-package</phase>
					<goals>
						<goal>copy-dependencies</goal>
					</goals>
					<configuration>
						<outputDirectory>${project.build.directory}/lib</outputDirectory>
					</configuration>
				</execution>
			</executions>
		</plugin>
	</plugins>

参考:
https://blog.youkuaiyun.com/weixin_32524367/article/details/110138359
https://blog.youkuaiyun.com/sayyy/article/details/94720775
https://blog.youkuaiyun.com/JavaStudyljh/article/details/119637250
 

------------------------------------------------------------------------------------------------------------------------------

FastJson的0day漏洞

    1、autotype开关可能被绕过,攻击者伪装自定义攻击类,利用rmi,去指定的rmi地址中调用方法
    2、fastjson1.2.68及以后的版本可以设置safeMode=true禁用autotype
        2.1、ParserConfig.getGlobalInstance().setSafeMode(true);
        2.2、-Dfastjson.parser.safeMode=true

public static void main(String[] args) {
    ParserConfig.getGlobalInstance().setSafeMode(true);
    Apple apple = new Apple(100);
    TestDto dto = new TestDto("1", "zhangsan", 20, apple);
    System.out.println(JSON.toJSONString(dto));
    TestDto testDto = JSON.parseObject(JSON.toJSONString(dto), TestDto.class);
    System.out.println(testDto.getName());
    System.out.println(JSON.toJSONString(dto, SerializerFeature.WriteClassName));
    TestDto testDto1 = JSON.parseObject(JSON.toJSONString(dto, SerializerFeature.WriteClassName), TestDto.class);
    System.out.println(testDto1.getName());
}

https://zhuanlan.zhihu.com/p/157211675
https://www.freebuf.com/vuls/240392.html
https://blog.youkuaiyun.com/weixin_42556197/article/details/112941985


------------------------------------------------------------------------------------------------------------------------------
nginx 读取proxy_temp 无权限 failed (13: Permission denied)
    前端请求返回失败:NET::ERR_CONTENT_LENGTH_MISMATCH

    分析:
    缓存文件过多,被缓存到 nginx/proxy_temp/* 下面了,而proxy_temp默认是nobody用户创建 

    解决方案:
    加大Nginx的proxy_temp_file_write_size设定缓存文件夹大小。如以下Nginx配置:
    http {
        ***************************************************
        proxy_connect_timeout 600;            #nginx跟后端服务器连接超时时间(代理连接超时)
        proxy_read_timeout    600;              #连接成功后,后端服务器响应时间(代理接收超时)
        proxy_send_timeout    600;             #后端服务器数据回传时间(代理发送超时)
        proxy_temp_file_write_size  128k;  #设定缓存文件夹大小,大于这个值,将从upstream服务器传
        ***************************************************
    }

https://www.cnblogs.com/mypm/archive/2011/01/21/1941064.html
https://www.jianshu.com/p/a6993684801f
https://bbs.51cto.com/thread-1492237-1-1.html
https://blog.51cto.com/bolemon/1868412


--------------------------------------------------------------------------------------------------------------------------------
Caused by: java.io.IOException: BROKEN PIPE 断开的管道
    前端请求返回失败:NET::ERR_INCOMPLETE_CHUNKED_ENCODING200

    分析:
    1、网查原因可能是传输内容过程导致,这里的问题是方法返回是内容过程,超过默认限制

    解决方案:
    加大Nginx的proxy_buffer_size、proxy_buffers、proxy_busy_buffers_size可以解决这个问题。如以下Nginx配置:
    http {
        ***************************************************
        proxy_connect_timeout 600;           #nginx跟后端服务器连接超时时间(代理连接超时)
        proxy_read_timeout    600;             #连接成功后,后端服务器响应时间(代理接收超时)
        proxy_send_timeout    600;             #后端服务器数据回传时间(代理发送超时)
        proxy_buffer_size     128k;              #设置代理服务器(nginx)保存用户头信息的缓冲区大小
        proxy_buffers         32 128k;            #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
        proxy_busy_buffers_size  128k;      #高负荷下缓冲大小(proxy_buffers*2)
        ***************************************************
    }

https://blog.youkuaiyun.com/baidu_19473529/article/details/87898939
https://www.jianshu.com/p/d4eaa946e111
https://ask.youkuaiyun.com/questions/678654
https://blog.youkuaiyun.com/weixin_42381713/article/details/81335023
 

----------------------------------------------------------------------------------------------------------------------------------

Mybatis 查询大量数据响应太慢
    通过JDBC取数据时,默认是10条数据取一次,即fetch size为10(根据oracle的文档,默认的fetchSize是10),如果增大这个数字可以减少客户端与oracle的往返,减少响应时间
解决方案:
    后来在.xml文件的<select fetchSize='2000'></select>,问题解决

https://blog.youkuaiyun.com/qq_29026539/article/details/90173012

-----------------------------------------------------------------------------------------------------------------------------------

python调用数据库,oracle客户端报错:

    ERROR in db: DPI-1047: Cannot locate a 64-bit Oracle Client library: "libclntsh.so: cannot open shared object file: No such file or directory"
解决方案(将Instant Client永久添加到运行时链接路径):
    sudo sh -c "echo /opt/oracle/instantclient_19_6 > /etc/ld.so.conf.d/oracle-instantclient.conf"
    sudo ldconfig

    注:
    ldconfig是一个动态链接库管理命令,其目的为了让动态链接库为系统所共享。
    sudo是linux系统管理指令,是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具

    环境变量设置:
    ORACLE客户端instantclient_11_2环境变量配置,配置文件为用户更目录下.bashrc( ~/.bashrc ) 
    #User specific aliases and functions
    export ORACLE_HOME=/home/orcl0702/instantclient_11_2
    export TNS_ADMIN=$ORACLE_HOME/network/admin
    export NLS_LANG='SIMPLIFIED CHINESE_CHINA.ZHS16GBK'
    export LD_LIBRARY_PATH=$ORACLE_HOME
    export PATH=$ORACLE_HOME:$PATH


https://oracle.github.io/odpi/doc/installation.html#linux
https://www.cnblogs.com/schips/p/10183111.html
https://www.cnblogs.com/lkj371/p/12793463.html
 

----------------------------------------------------------------------------------------------------------------------------------
Request method 'GET' not supported(Could not find acceptable representation)
    org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'GET' not supported
    我的问题:
        请求某个url后报以上错误
    参考解决思路:
        方法不能有返回值,却有了返回值,将方法改为void即可。
        if (outputValue != null) {
            throw new HttpMediaTypeNotAcceptableException(this.allSupportedMediaTypes);
        }
    我的解决办法:
        代码中有以下逻辑,response.sendRedirect 到指定页面后,方法又返回另一个指定页面,避免出现这种逻辑即可(这里将第二行return login.html去掉)
        response.sendRedirect(request.getContextPath() + "/noright.html");
        //return "login.html";

    https://www.jianshu.com/p/bfd09b18206e


----------------------------------------------------------------------------------------------------------------------------------------------
Mybatis 使用Oracle主键自增插入报错
    无效的列类型: getLong not implemented for class oracle.jdbc.driver.T4CRowidAccessor
    把insert 属性里的useGeneratedKeys的属性设置为false,useGeneratedKeys 要求数据库本身具备主键自动增长的功能,mysql、sqlserver可以使用useGeneratedKeys=true ,oracle不支持useGeneratedKeys,所以ORACLE是不能使用useGeneratedKeys=true的。  
    Oracle 如果需要保存后返回id,
    <insert id="save" parameterType="com.test.Bean" useGeneratedKeys="false" keyProperty="id" >
        <selectKey resultType="Long" order="BEFORE" keyProperty="id">  
            SELECT SQ_TABLE_ID.NEXTVAL as id from DUAL
        </selectKey>
        insert into table (id, code) values (#{id}, #{code})
    </insert>

    https://www.cnblogs.com/legendjslc/p/7159171.html


------------------------------------------------------------------------------------------------------------------------------------------------
Quartz2.2.3+Spring整合的问题
    java.sql.SQLException: ORA-01453: SET TRANSACTION 必须是事务处理的第一个语句
    1:可能你在配置文件中配置了多个数据源,解决方法:只配置一个
    2:可能是由org.quartz.jobStore.txIsolationLevelSerializable设置为true的原因,将此属性设置为false

https://blog.youkuaiyun.com/zhaoyachao123/article/details/78469964


-------------------------------------------------------------------------------------------------------------------------------------------
Redis调优
    1> logfile "D:/redis/logs/redis.log", 设置日志路径
    2> maxmemory 10GB,最大内存设置
    3> maxmemory-policy allkeys-lru,超过最大内存处理策略(最近最少使用算法,从所有的键中选择空转时间最长的键值对清除)
    4> stop-writes-on-bgsave-error no,设置为no可忽略错误信息
    启动redis的时候指向指定的conf文件,启用这些配置
    start.bat文件如下:
        @echo
        d:
        cd D:\tools\dev tools\redis-latest
        redis-server.exe redis.windows.conf
        pause

    https://blog.youkuaiyun.com/gdj0001/article/details/80117797
    https://blog.youkuaiyun.com/hexieshangwang/article/details/47254087

---------------------------------------------------------------------------------------------------------------------------------------------
tomcat 服务性能调优
    1、设置最大线程数,增加server.xml中Connector中的属性
        maxThreads="800",tomcat起动的最大线程数,即同时处理的任务个数,默认值为200
        acceptCount="1000",当tomcat起动的线程数达到最大时,接受排队的请求个数,默认值为100
    2、设置jvm内存 
        setevn.bat文件:
        set JAVA_OPTS=-Xms8192m -Xmx8192m -Xss1024K -XX:PermSize=512m -XX:MaxPermSize=1024m -XX:-UseGCOverheadLimit
        rem set JAVA_OPTS=-Xms4096m -Xmx4096m -Xss1024K -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=1024m -XX:-UseGCOverheadLimit

    https://www.cnblogs.com/jpfss/p/11015976.html
    https://blog.youkuaiyun.com/JustinQin/article/details/79530038

-----------------------------------------------------------------------------------------------------------------------------------------------
java web项目,post请求发送数据太大的处理方法
    可以设置tomcat,server.xml中Connector中的属性,maxPostSize的值。tomcat默认是2M,单位为字节。maxPostSize=”0”则表示不限制大小。maxPostSize="5120000"

https://blog.youkuaiyun.com/menghuanzhiming/article/details/78127389


-------------------------------------------------------------------------------------------------------------------------------------------------
oracle11g 本地服务无法访问
    修改pfile配置
        D:\develop\oracle\admin\orcl\pfile\init.ora.912018124822
        找到local_listener,然后将它的值换掉(原始值叫LISTENER_ORCL),换成你tnsnames.ora中的ADDRESS_LIST
        原配置:#local_listener=LISTENER_ORCL
        修改后:local_listener="(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))"
    执行命令:
        1、sqlplus /nolog
        2、conn sys/sysdb as sysdba
        3、startup pfile='D:\develop\oracle\admin\orcl\pfile\init.ora.912018124822'

    https://blog.youkuaiyun.com/xb12369/article/details/26720275


------------------------------------------------------------------------------------------------------------------------------------------------​​​​​​​
bootstrap中使用modal加载kindeditor时弹出层文本框不能输入的问题
    https://blog.youkuaiyun.com/aaa333qwe/article/details/72865388
    //解决编辑器弹出层文本框不能输入的问题
    $('#transeModal').off('shown.bs.modal').on('shown.bs.modal', function (e) {
        $(document).off('focusin.modal');//解决编辑器弹出层文本框不能输入的问题
    });


-----------------------------------------------------------------------------------------------------------------------------------------------​​​​​​​
css,js 打包添加版本号,解决前端页面样式缓存问题

https://blog.youkuaiyun.com/u013218443/article/details/85165800


-----------------------------------------------------------------------------------------------------------------------------------------------​​​​​​​​​​​​​​
oracle 无法从套接字读取更多的数据:
    数据库服务器上用sys账户登录后输入:alter session set “_optimizer_join_elimination_enabled”=false;
    然后后重启数据库:
        shutdown immediate;
        startup;
    然后重启监听:
        lsnrctl
        stop
        start
https://blog.youkuaiyun.com/xydds/article/details/8859224
https://blog.youkuaiyun.com/sinat_33517300/article/details/78968181
https://lucklysmile-gmail-com.iteye.com/blog/2023993

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值