Spring Boot基础

配置文件

外部配置文件

Spring程序会按优先级从下面这些路径来加载配置文件

  • 当前目录下的/config目录
  • 当前目录
  • classpath里的 /config 目录
  • classpath 根目录

自定义配置文件

1
2
3
$ java -jar myproject.jar --spring.config.location=classpath:/default.properties,classpath:/override.properties

$ java -jar -Dspring.config.location=yourPath/config.properties app.jar

按Profile不同环境读取不同配置

1
java -jar app.jar --spring.profiles.active = prod|dev|test

打包

打成jar包

修改pom.xml

pom.xml

1
<packaging>jar</packaging>

打包

1
2
3
4
$ cd 项目目录(和pom.xml同级)
$ mvn clean package
## 排除测试代码后进行打包
$ mvn clean package -Dmaven.test.skip=true

打包完成后jar包会生成到target目录下,命名一般是 项目名+版本号.jar。

打成war包

修改pom.xml

pom.xml

1
<packaging>war</packaging>

排除tomcat

1
2
3
4
5
6
7
8
9
<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>
<scope>provided</scope>
</dependency>

打包

1
2
3
4
$ cd 项目目录(和pom.xml同级)
$ mvn clean package
## 排除测试代码后进行打包
$ mvn clean package -Dmaven.test.skip=true

打包完成后jar包会生成到target目录下,命名一般是 项目名+版本号.war。

打包成可执行文件

1
2
3
4
5
6
7
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<executable>true</executable>
</configuration>
</plugin>

这样生成的jar包,就可以直接以如下命令运行了。

1
$ ./app-1.0.jar

启动

控制台启动

1
$ java -jar target/app-1.0.0.jar

这种方式,只要控制台关闭,服务就不能访问了。

后台运行的方式启动

1
$ nohup java -jar target/app-1.0.0.jar &

发布

以init.d方式发布为服务

1
2
$ ln -s /var/app/app.jar /etc/init.d/app
chmod +x /etc/init.d/app

以systemd方式发布为服务

systemed比init.d晚出现,在性能、功能等方面都有改进,被推荐使用。

1
$ vi /etc/systemd/system/app.service

内容如下:

1
2
3
4
5
6
7
8
9
10
[Unit]
Description=app
After=syslog.target

[Service]
ExecStart=/var/app/app-1.0.jar
SuccessExitStatus=143

[Install]
WantedBy=multi-user.target

管理服务

方式1

1
$ /etc/init.d/app start|stop|restart|enable|disable

方式2

1
$ service app start|stop|restart|enable|disable

常见问题

打包时找不到类

原因分析

打包webapp时,没有把 webapp 所引用的 jar 包打包进来,webapp.jar 中没有包含 service.jar 、dao.jar 导致扫描时找不到类。

解决办法

pom.xml中增加如下代码:

1
2
3
4
5
6
7
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>

完整代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>

SLF4J: Class path contains multiple SLF4J bindings

1
2
3
4
5
6
7
8
9
10
11
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>2.0.4.RELEASE</version>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>

在线工具

参考

JPA

坚持原创技术分享,您的支持将鼓励我继续创作!