今天周末,不过由于是全国哀悼日,禁止所有娱乐活动,为了响应上级指示精神,自己在家默默学习一天,初学Java,感觉哪里都是问题,只好多加记录,以便以后快速解决问题。
我是用Springboot部署了一个最初的原始项目,只有两个功能:
1、url路由,就是@ResetController那个,类似Laravel里的route.php里定义的路由。
2、读取application.propertites里配置的变量值。
好了,问题记录如下:
好了,在Ideal里测试时,没有发现问题,然后执行了maven clean和maven package,将生成的war包放到了tomcat的webapps目录,问题来了:
1、application.propertites里的变量名与IndexController里的名不一样,排查了好久,一个多小时,心酸,没有老师指导只能硬着头皮查查查。
2、变量名都没问题了,然后还是报错,原因是我这里最初没有写classpath,导致找不到application.properties,唉,又查好久。
@PropertySource(value="classpath:/application.properties",encoding = "UTF-8")
package com.shen.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.PropertySource;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
@RestController
@PropertySource(value="classpath:/application.properties",encoding = "UTF-8")
public class IndexController {
@Value("${com.shen.want}")
private String want;
@Value("${com.shen.hi}")
private String hi;
@RequestMapping("test")
public String test(){
System.out.println(want);
System.out.println(hi);
System.out.println("我靠w1111112222222222!");
return "Hello,world"+want;
}
@RequestMapping("test2")
public String test2(){
return "Hello 2";
}
}
3、最让我崩溃的问题,我的tomcat的Webapps目录里,有一些原来eclipse发布的包,有一些可能有问题,然后启动的时候报错,我一直以为是我新建的springboot项目的问题,最后把原来的那些包全删掉,我的访问就正常了。。。醉了!!!
今天收获也很大:
1、刚刚熟悉了两种部署方式,一种 java -jar *.jar包的方式,这种方式可以不用管那个classpath路径的问题
2、部署到外部tomcat时候的方式。
这种的话,网上很多资料。
(1)在pom.xml里把内置的tomcat先设置一下scope属性,这样在打包时候就不会打进去。
<!--排除tomcat-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<!--打包的时候可以不用包进去,别的设施会提供。事实上该依赖理论上可以参与编译,测试,运行等周期。
相当于compile,但是打包阶段做了exclude操作-->
<scope>provided</scope>
</dependency>
<!--排除tomcat end-->
(2)在入口的启动类里,继承 Springboot的 SpringBootServletInitializer 类,但是我发现我用的2.2.6在新建项目时候,多了一个
ServletInitializer.java文件,已经继承了SpringBootServletInitializer ,并实现了相关功能。所以这一步我就没有操作。
(3)直接maven clean,然后maven package,发布到外部tomcat的webapps里,OK了。
苦逼的抓瞎,希望前面光明大大滴!