spring boot

新项目采用spring boot来搭建,因为之前也没有仔细研究过,只是直接拿过来用,所以一路上会遇到不少的问题,总结一下。

spring boot最大的特点应该是给我们提供了很多的起步依赖和自动配置,这些功能,用的好了能省不少事,但不了解的时候直接用也会出很多的错误。

1、在刚搭建完spring boot项目之后,通过主类启动spring boot项目,启动之后会自动停止,这是因为该项目不是web项目,此时需要在项目中添加一下两个依赖:

		<dependency>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-web</artifactId></dependency>
		<dependency>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-tomcat</artifactId></dependency>
然后项目就可以一直启动,不会自动关闭。
     2、在spring boot中,有很多AutoConfiguration,有时候spring boot找不到需要的属性时就会报错,这个时候就需要在@EnableAutoConfiguration(exclude={})中将对应
的class排掉,比如你自己配连接池,就需要自己排除掉DataSourceAutoConfiguration。
     3、spring boot在本地一直都是直接启动,如果要部署到容器中,就可能会出现问题。由于公司用的容器都是resin,在resin中部署的时候,就遇到如下报错:
	noMethodDefError:javax.persistence.Table:indexes()方法 
    注:resin版本:resin-pro-4.0.54   hibernate core:5.0.3。刚遇见这个问题时也是一头雾水,后来查出来了,是因为resin在加载web项目时也会自带一些jar包,存放于
resin主目录下lib文件夹中,该版本resin中的javaee-16.jar中带有jpa 2.0版本,但hibernate5.1实现的是jpa 2.1版本,这个才是真正冲突的原因。由于此前一直没有遇到过
类似问题,所以这次也算是长见识了。包冲突不只是项目中引入的包冲突,还可能和容器中的包中冲突。最后的解决方案,在网上查到有三种:
1、修改resin的类加载器配置,简单讲,就是在WEB-INF目录下加入resin-web文件,内容如下:
	 <web-app>
		<class-loader>
			<servlet-hack/>
		</class-loader>
      </web-app>
	此种方法我做了尝试,但遇到解析xml的错误,大概是resin要是用自己的xml解析器,遂没有在往下运行。
2、降低hibernate的版本,降到支持jpa2.0的版本,但是如果使用了spring起步依赖的话,会是很麻烦的问题,包括spring boot在内的所有版本都要降低。
3、直接部署jar 包。这当然是最直观的方式,至于为什么一开始没有用这种方法部署,是因为部门以往的项目都是用resin部署,而且resin的watch dog机制可以防止进程挂掉,
无需额外的监控

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值