今天周末,不过由于是全国哀悼日,禁止所有娱乐活动,为了响应上级指示精神,自己在家默默学习一天,初学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了。

 

苦逼的抓瞎,希望前面光明大大滴!