springboot版本
部署要求tomcat8,spring-boot-starter-parent :1.3.8.RELEASE最高支持tomcat8.0.37,
直接修改< parent>的version会出错:
xxxx\target\classes\META-INF\MANIFEST.MF (系统找不到指定的路径。)
需project→clean然后项目→maven→update project
解决log.info无法使用
1、需要
< dependency>
< groupId>org.projectlombok< /groupId>
< artifactId>lombok< /artifactId>
< /dependency>
新springboot不用加< version>< /version>,老版需要加
2、加上@Slf4j
3、安装lombok插件,下载:https://projectlombok.org/download,
下载后直接运行
安装插件后,整个eclipse异常,需要在eclipse安装目录下的eclipse.ini文件最后自动生成的-javaagent前加上-vmargs
使用log.info
多个参数可以不用拼接字符串,如
log.info(“参数1:{},参数2:{}”, 参数1, 参数2);
js连接websocket服务端
var websocket = new WebSocket(“ws://localhost:8080/one”);
注意接口需要加上注解@Component,否则404
部署到tomcat
因为springboot内嵌tomcat,所有需要去除。
1、Application启动类extends SpringBootServletInitializer,重写configure方法,return builder.sources(this.getClass())。
2、将内置的tomcat依赖的scope改为provided
< dependency>
< groupId>org.springframework.boot< /groupId>
< artifactId>spring-boot-starter-tomcat< /artifactId>
< scope>provided< /scope>
< /dependency>
3、默认maven install打jar包,改为打war包:
< packaging>war< /packaging>
注:以上三点在用springboot脚手架选war可以自动生成
4、右键项目→properties→maven 去掉pom.xml
5、otr需要server.servlet.context-path一致
部署到tomcat访问页面404
巨坑,按网上说的都没用,其实是springboot和tomcat版本不匹配
tomcat尽量要高版本,springboot2.5.4需要tomcat9.0.52
参考:https://blog.csdn.net/jx520/article/details/92608842
mybatis+oracle
1、oracle的jdbc需手动添加,jar路径在C:\app\1\product\11.2.0\dbhome_1\jdbc\lib\ojdbc6.jar
2、将ojdbc6.jar安装到本地maven仓库,参考:https://www.cnblogs.com/zuiyue_jing/p/7566732.html
3、右键项目run as→maven build,在Goals填写:install:install-file -Dfile=ojdbc6.jar的路径 -DgroupId=com.oracle -DartifactId=ojdbc6 -Dversion=11.2.0 -Dpackaging=jar
4、在pom中加入依赖,groupId、artifactId、version就是在Goals填写的D开头的三个,即
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>1.0</version>
</dependency>
eclipse
第一张是源文件,不能去除,否则会提示找不到main type
还有,将oracle6载入本地maven仓库那一步,会导致项目run错,应run configurations调整到spring boot app
Cannot load driver class: oracle.jdbc.OracleDriver
spring.datasource.driver-class-name=oracle.jdbc.OracleDriver后面有一个空格,删掉就行
@ServerEndpoint无法@Autowired
原因:spring是单例的,但是每一个客户端连接就会创建新的WebSocket
解决:
class WebSocket{
private static Service service;
@Autowired
public void setService(Service service){
WebSocket.service=service;
}
}
java.sql.SQLException: ORA-01017: invalid username/password; logon denied
spring.datasource.username 注意是username不是name
druid
只需在application.properties配置,不需要写配置文件,必要配置如下:
spring.datasource.druid.db-type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.druid.driverClassName=oracle.jdbc.OracleDriver
spring.datasource.druid.url=jdbc:oracle:thin:@ip:1521:sid
spring.datasource.druid.username=XXX
spring.datasource.druid.password=XXX
参考:https://www.cnblogs.com/yy3b2007com/p/8763077.html
1、druid monitor的druid/login.html访问不到
解决:druid-spring-boot-starter版本过高,1.1.9就可以访问
2、登陆druid/login.html,NullPointerException异常
解决:本地开发可不登陆直接访问/druid/datasource.html,部署到tomcat后可以正常登录
2、优化:
连接数 = (核心数 * 2) + 有效磁盘数
3、druid官方通用配置
https://github.com/alibaba/druid/wiki/DruidDataSource%E9%85%8D%E7%BD%AE
spring.datasource.druid.max-active=20
spring.datasource.druid.initial-size=1
spring.datasource.druid.max-wait=6000
spring.datasource.druid.min-idle=1
spring.datasource.druid.time-between-eviction-runs-millis=60000
spring.datasource.druid.min-evictable-idle-time-millis=300000
spring.datasource.druid.test-while-idle=true
spring.datasource.druid.test-on-borrow=false
spring.datasource.druid.test-on-return=false
spring.datasource.druid.pool-prepared-statements=true
spring.datasource.druid.max-open-prepared-statements=20
spring.datasource.druid.async-init=true
在上面的配置中,通常你需要配置url、username、password,maxActive这三项。
Druid会自动跟url识别驱动类名,如果连接的数据库非常见数据库,配置属性driverClassName
asyncInit是1.1.4中新增加的配置,如果有initialSize数量较多时,打开会加快应用启动时间
2:testOnBorrow ,testOnReturn 默认为关闭,可以设置为不配置。
3:testWhileIdle(在获取连接后,确定是否要进行连接空闲时间的检查)。默认为true。配置里面不再进行设置。
流程说明:
1:在第一次调用connection的时候,才会进行 initialSize的初始化。
2:心跳检测时间线程,会休眠timeBetweenEvictionRunsMillis时间,然后只对(没有borrow的线程 减去 minIdle)的线程进行检查,如果空闲时间大于minEvictableIdleTimeMillis则进行close。
3:testWhileIdle必须设置为true,在获取到连接后,先检查testOnBorrow,然后再判定testwhileIdle,如果连接空闲时间大于timeBetweenEvictionRunsMillis,则会进行心跳检测。
4:不需要配置validationQuery,如果不配置的情况下会走ping命令,性能更高。
5:连接保存在数组里面,获取连接的时候,获取数组的最后一位。在timeBetweenEvictionRunsMillis时是从前往后进行检查连接的有效性。
docker 端口映射
注意容器内端口一定是8080,-p 8090:8080,tomcat默认端口是8080
mybatis的xml文件或html、js打包没打到
解决:在pom的buil内加:
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.*</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>
注意,不加</resources>,static下的html、js可以打包,加了会导致打不进包,需要把resources加上<include>**/*.*</include>
Non supported character set (add orai18n.jar in your classpath): ZHS16GBK
<dependency>
<groupId>cn.easyproject</groupId>
<artifactId>orai18n</artifactId>
<version>12.1.0.2.0</version>
</dependency>
使用jedisCluster从redis集群获取数据
1、<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
2、写redisUtil工具类
3、在@ServerEndpoint接口声明JedisCluster jedis=null,然后在@OnOpen方法获取jedis
context更改问题
没有彻底弄清,注意application.properties的server.servlet.context-path与pom中的<fileName>保持一致,还有docker的tomcat似乎有缓存,html会留有上次的工程,所以部署新的项目要重建tomcat