Spring Boot 入门
目录
Spring Boot 入门
参考官方文档
https://docs.spring.io/spring-boot/docs/1.5.8.RELEASE/reference/htmlsingle
-
介绍
SpringBoot可以帮助开发者更容易的创建基于Spring的应用程序和服务。
默认集成了Tomcat容器,所以可以独立运行,可以不依赖于外部容器。当然也可以达成war包部署
提供了一种从main()方法启动的便捷方式,也就说:只需要在main方法所在的类右键Run即可启动应用。
相比于传统的spring应用里需要各种配置,比如web.xml 加载spring、spring mvc,扫描路径等,SpringBoot只需要很少的几个配置或者注解就可以达到。
整合了很多框架,pom.xml里只需要引入需要的starter依赖就可以了。
-
版本
Spring Boot 1.5.8(目前我们使用的):
此版本默认使用1.7的jdk(官方建议使用1.8),4.3.12.RELEASE 版本的spring框架。
内嵌Tomcat 8
Maven 3.2或更高版本
最新的Spring Boot 2.0.0.BUILD-SNAPSHOT:
Java 8 and Spring Framework 5.0.2.RELEASE or above.
-
启动类
使用@SpringBootApplication注解
-
配置文件
默认使用的application.properties/ application.yml
yml文件书写时注意,冒号和value之间有个空格
上面的写法相当于properties文件里的:
server.port=8081
server.context-path=/demo
-
第一个Spring Boot web应用
-
idea创建demo应用
idea自带file->new->project->Spring Initializr 然后next。。next。。。
如果是搭一个最简单的web应用。只需要勾选如下Web即可:
如果使用mybatis则需要勾选下图的MyBatis,如果使用jdbcTemplate,则需要勾选下图的JDBC---此时需要在创建好的工程的配置文件里设置相应的数据源。
也可以不勾选,直接在pom文件里添加对应的依赖即可。
-
建好的应用结构
正常启动类在相对于其他目录的较高层目录。。如果修改启动类的路径,需要修改@SpringBootApplication的scanBasePackages,具体可参考后面的章节
-
Pom.xml
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.8.RELEASE</version>
<relativePath/>
<!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
注意:如果网络不好,可能会打不开上面的界面。也可以自行创建一个普通的maven工程。。然后参考上面的pom文件进行修改:1.修改<parent>节点 2.增加springboot的相关依赖 3.<build>节点里增加spring-boot-maven-plugin,这样打出来的才是一个可执行的jar
-
增加一个controller进行测试
-
启动应用
默认的端口是8080.。如需修改,请在application.yml里修改
server:
port: 8080 #如果此处不配置,则使用默认的8080端口.。
-
测试
-
支持jdbcTemplate
-
Pom.xml增加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc7</artifactId>
</dependency>
-
配置文件里增加数据源信息
spring:
datasource:
driver-class-name: oracle.jdbc.driver.OracleDriver
url: jdbc:oracle:thin:@ip:端口:sid
username: 用户名
password: 密码
恭喜你,下面可以使用Autowired注入JdbcTemplate了
-
在dao里使用JdbcTemplate
-
测试
可以增加自己的controller类进行测试
-
支持MyBatis
-
Pom.xml里增加依赖
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.1</version>
</dependency>
和使用jdbctemplate一样,需要在配置文件里存在需要的数据源信息。
-
增加dao接口
-
增加接口对应的Mapper
在resources的同级目录增加同名的xml文件。。当mapper xml与mapper class不在同一个目录下时需要在配置文件指定mybatis.mapper-locations,比如: mybatis.mapper-locations=classpath*:com/codeya/springboot/**/dao/*.xml
-
启动类里增加@MapperScan
basePackage 指定mybatis接口对应的包的位置
-
测试
-
读取配置文件里的属性
使用@Value("${属性名}")获取配置文件里的属性
举例:
配置文件里增加两个属性
-
自定义配置文件
使用@PropertySource 来引入配置文件。。此注解需要与@Configuration 配合使用。
-
日志
SpringBoot默认使用的logback。默认纪录到INFO级别,即记录ERROR, WARN和INFO级别的信息。
如某路径需输出debug级别的日志,需要在配置文件里定义logging.level.包路径=DEBUG,比如下图的com.example.demo: debug表示com.example.demo包的日志输出级别是debug
logging.level.root表示该应用总的日志开关,默认是INFO。
因为输出日志文件需要消耗I/O性能,生产环境请将所有日志开关设置为ERROR。
默认不输出到文件,如需输出文件,需要在配置文件中设定logging.file属性,此属性可定义相对路径或绝对路径。
日志文件每达到10M就会被分割。
logging.pattern.console 是定义控制台显示日志时的格式
logging.pattern.file是定义文件记录日志时的格式
这两个值默认不需要设置,但默认的格式不会输出行号。。如需输出行号,可以改成下图里的格式。。
其中%L表示行号
logging:
file: log/log.log
level:
root: info
com.codeya.springboot: debug
pattern:
console: -%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}:%L){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}
file: -%d{yyyy-MM-dd HH:mm:ss.SSS} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%t] %-40.40logger{39}:%L:%m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}
-
测试
SpringBootTest里的classes指定的是启动类
-
扩展
-
如果启动类所在目录为较底层目录
正常启动类在相对于其他目录的较高层目录(左图),如果将启动类加到一个底层目录,比如新增的main目录下会怎样呢?
如果启动类里不做改动,则原来的路径访问都会报404.。这是因为默认的扫描路径是启动类的子目录。。
此时需要手动指定启动类里的scanBasePackages
-
打包+运行
-
idea打包
-
idea见下图,使用的命令clean package -Dmaven.test.skip,。。也可以使用命令行mvn clean package -Dmaven.test.skip进行打包
-Dmaven.test.skip=true 跳过测试。
最终打出来的包:
可以自己打开看看。。这个jar的目录和普通的jar不太一样。。里面包含了lib和内嵌的tomcat。。
-
使用java –jar运行此jar
Java –jar demo-0.0.1-SNAPSHOT.jar
-
使用profile区分配置
默认先加载application.yml/.properties文件,然后使用对应的profile文件来覆盖其配置。。
可以在启动的时候指定profile。也可以在application文件里指定spring.profiles.active(见下图)。
如果是启动参数里设置则:Java -jar demo-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev
-
测试profile
我们在application.yml 里设置的端口为8080,test. properties1= hellooooooooooooo
新增加两个配置文件application-product.yml 、application-dev.yml、,端口分别设为8081和8082,
test. properties1的值分别加上对应的后缀。。见下图
然后启动配置里指定profile(可以看出是文件的后缀),参考下图:
也可以这样设置:
启动测试