前言
Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。
1.创建maven项目 修改pom文件如下
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.xue</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.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.7</java.version>
</properties>
<dependencies>
<!-- 核心模块,包括自动配置支持、日志和YAML -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!-- 测试模块,包括JUnit、Hamcrest、Mockito。 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- CXF webservice -->
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-spring-boot-starter-jaxws</artifactId>
<version>3.1.11</version>
</dependency>
<!-- CXF webservice -->
<!-- mysql start -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!-- mysql end -->
<!-- httpclient start -->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore</artifactId>
<version>4.4.1</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>fluent-hc</artifactId>
<version>4.3.1</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpmime</artifactId>
<version>4.3.1</version>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- httpclient end -->
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.0</version>
</dependency>
</dependencies>
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<executable>true</executable>
</configuration>
</plugin>
</plugins>
</build>
</project>
2.项目配置文件
application.properties是主配置文件项目启动时会加载该文件,主要是放公共配置
dev是本地配置,prod是生产环境配置,test是测试环境配置
这样配置的好处是启动时可以默认加载某个配置文件,启动命令如下
java -jar project-name.jar --spring.config.location=/project-name/config/application.properties --spring.profiles.active=dev
application.properties配置如下
#激活哪一个环境的配置文件
spring.profiles.active=dev
#公共配置
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss:
application-dev.properties配置如下
#端口号
server.port=8080
#数据库连接
spring.jpa.show-sql = true
spring.jpa.hibernate.ddl-auto= update
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/shop?useUnicode=true&autoReconnect=true&failOverReadOnly=false&characterEncoding=UTF-8
spring.datasource.username=root
spring.datasource.password=admin
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.initialSize=10
spring.datasource.minIdle=10
spring.datasource.maxActive=30
spring.datasource.maxWait=60000
spring.datasource.timeBetweenEvictionRunsMillis=60000
spring.datasource.minEvictableIdleTimeMillis=300000
spring.datasource.validationQuery=SELECT 1 FROM DUAL
spring.datasource.testWhileIdle=true
spring.datasource.testOnBorrow=false
spring.datasource.testOnReturn=false
application-test.properties配置和application-prod.properties配置如上
3.项目目录结构 如下图
4. 日志配置
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- <include resource="org/springframework/boot/logging/logback/base.xml" /> -->
<!--生产环境 -->
<springProfile name="prod">
<!-- 将日志记录到文件中 -->
<appender name="LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>back.log</File>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日志文件输出的文件名-->
<FileNamePattern>back.%d{yyyy-MM-dd}.log</FileNamePattern>
<!--日志文件保留天数-->
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<Pattern>%-20(%d{yyyy-MM-dd HH:mm:ss.SSS}) [%thread] %-5level %logger{80}.%method - %msg%nn</Pattern>
</encoder>
</appender>
<root level="WARN">
<appender-ref ref="LOG"/>
</root>
</springProfile>
<!--测试环境 -->
<springProfile name="test">
<!-- 将日志打印到控制台 -->
<appender name="LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>back.log</File>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>back.%d{yyyy-MM-dd}.log</FileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<Pattern>%-20(%d{yyyy-MM-dd HH:mm:ss.SSS}) [%thread] %-5level %logger{80}.%method - %msg%n</Pattern>
</encoder>
</appender>
<root level="info">
<appender-ref ref="LOG"/>
</root>
</springProfile>
<!--开发环境 -->
<springProfile name="dev">
<!-- 将日志打印到控制台 -->
<appender name="LOG" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<Pattern>%-20(%d{yyyy-MM-dd HH:mm:ss.SSS}) [%thread] %-5level %logger{80}.%method - %msg%n</Pattern>
</encoder>
</appender>
<root level="info">
<appender-ref ref="LOG"/>
</root>
</springProfile>
<!-- 下面配置一些第三方包的日志过滤级别,用于避免刷屏 -->
<logger name="org.hibernate" level="WARN" />
<logger name="org.springframework" level="WARN" />
<logger name="org.thymeleaf" level="WARN" />
<logger name="org.apache" level="WARN" />
<!-- show parameters for hibernate sql 专为 Hibernate 定制 -->
<logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="TRACE" />
<logger name="org.hibernate.type.descriptor.sql.BasicExtractor" level="DEBUG" />
<logger name="org.hibernate.SQL" level="DEBUG" />
<logger name="org.hibernate.engine.QueryParameters" level="DEBUG" />
<logger name="org.hibernate.engine.query.HQLQueryPlan" level="DEBUG" />
</configuration>
其中 也分 dev test prod 三个环境的日志,是根据启动那个配置文件就调用 logback-spring.xml 中springProfile对应的日志方式,这也是springboot的方便之处
5. 实战测试
springboot只需要在pom中引入jpa和MySQL依赖就可以实现增删改查
controller 层
@RestController
public class HelloWorldController {
@Autowired
private GoodsRepository goodsService;
private final Logger logger = LoggerFactory.getLogger(this.getClass());
@SuppressWarnings("deprecation")
@RequestMapping("/hello")
public String index() {
List<Goods> findByName = goodsService.findByName("哈哈");
logger.debug("This is a debug message");
logger.info("This is an info message");
logger.warn("This is a warn message");
logger.error("This is an error message");
logger.info(findByName.toString());
return findByName.toString();
}
}
@RestController 注解 相当于 @Controller 和 @ResponseBody 的二合一 很方便吧
service 层
@Service
public class GoodsService {
@Autowired(required=true)
private GoodsRepository goodsDao;
public List<Goods> findByName(String name){
return goodsDao.findByName(name);
}
}
repository 层 继承 JapRepository 就可以实现基本的crud
@Repository
public interface GoodsRepository extends JpaRepository<Goods, Integer> {
}
6.启动项目测试
总结,springboot出现的目标就是减少配置文件,轻量级的框架,比如要想集成redis 只需要在pom中加入
依赖,然后直接引入如下
@Autowired
private StringRedisTemplate stringTemplate;
就可以使用redis了,就是这么的方便,是不是瞬间感觉开发简单了好多
项目源码 springboot项目源码