eclipse上springboot实现websocket笔记

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

要在Spring Boot中实现WebSocket,可以遵循以下步骤: 1. 在pom.xml文件中添加spring-boot-starter-websocket依赖项。 2. 创建一个WebSocket配置类,使用@EnableWebSocket注解启用WebSocket,并继承WebSocketMessageBrokerConfigurer类。 3. 在配置类中,重写registerStompEndpoints()方法,用于注册WebSocket端点。可以使用withSockJS()方法启用SockJS支持,以便在不支持WebSocket的浏览器上提供备用传输选项。 4. 创建一个WebSocket处理器类,实现WebSocketHandler接口,并重写相关方法来处理WebSocket连接和消息。 5. 在处理器类中,可以使用@MessageMapping注解来定义处理特定消息的方法。 6. 运行Spring Boot应用程序,WebSocket将在指定的端点上启用。 以下是一个简单的示例代码: ```java // 1. 添加依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> </dependency> // 2. 创建WebSocket配置类 @Configuration @EnableWebSocket public class WebSocketConfig implements WebSocketMessageBrokerConfigurer { @Override public void registerStompEndpoints(StompEndpointRegistry registry) { registry.addEndpoint("/api/websocket").withSockJS(); } } // 3. 创建WebSocket处理器类 @Component public class WebSocketHandler implements WebSocketHandler { @Override public void afterConnectionEstablished(WebSocketSession session) throws Exception { // 处理连接建立后的操作 } @Override public void handleMessage(WebSocketSession session, WebSocketMessage<?> message) throws Exception { // 处理收到的消息 } @Override public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception { // 处理传输错误 } @Override public void afterConnectionClosed(WebSocketSession session, CloseStatus closeStatus) throws Exception { // 处理连接关闭后的操作 } @Override public boolean supportsPartialMessages() { return false; } } // 4. 处理特定消息的方法 @Controller public class MessageController { @MessageMapping("/sendMessage") public void sendMessage(String message) { // 处理收到的消息 } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值