springboot相较于spring来说更加简便,没有大量的xml文件,只需要通过注解和properties文件即可完成。
查阅了一篇不错的文章之后做了总结
连接 https://blog.csdn.net/u013187139/article/details/68944972
本人使用的开发工具是idea。
通过maven引入依赖的jar包。
1.新建项目
next->finish
新建完成之后的目录结构
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.boottest</groupId>
<artifactId>myboot</artifactId>
<version>1.0-SNAPSHOT</version>
<name>myboot</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
<!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
<plugin>
<artifactId>maven-site-plugin</artifactId>
<version>3.7.1</version>
</plugin>
<plugin>
<artifactId>maven-project-info-reports-plugin</artifactId>
<version>3.0.0</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
将build节点删除,暂时用不到。删除后添加springboot需要的dependency。
<?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.boottest</groupId>
<artifactId>myboot</artifactId>
<version>1.0-SNAPSHOT</version>
<name>myboot</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
<!-- Spring boot 父引用-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.0.RELEASE</version>
</parent>
<dependencies>
<!--单元测试-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- Spring boot 核心web-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- log-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</dependency>
</dependencies>
</project>
配置springboot
1.新建controller,service,serviceimpl,dao的package,并且新建一个controller
添加注解和main方法
@Controller
@EnableAutoConfiguration
public class MytestController {
@RequestMapping("/")
@ResponseBody
String test() {
return "hello world";
}
public static void main(String[] args) throws Exception {
SpringApplication.run(MytestController.class, args);
}
}
运行main方法
访问网页
此页面表示启动成功。
2.添加业务层
在controller中注入并调用service方法
启动报错
这是因为springboot默认注入的顺序是按照包的顺序,controller注入的时候service还没有注入。
解决方案,在controller添加注解
@ComponentScan(basePackages = {"com.boottest"})
运行之后正常。
3.现在这种架构只有一个controller,但是一般的项目都是很多个controller。
修改controller
在外层添加一个启动类。新建项目的时候有一个App.java可以当做启动类,如果没有也可以自己新建一个。
运行main方法,访问网页
至此,一个基本的springboot搭建完毕。
集成mybatis
pom文件添加依赖,我这里添加了oracle和mysql的两个,你可以根据自己的情况选择一个
<!--mybatis-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.21</version>
</dependency>
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc14</artifactId>
<version>10.2.0.1.0</version>
</dependency>
和spring的用法一样,添加testdao接口,和xml文件
新建resource文件夹
设为资源文件根目录
新建mapper文件下和xml文件
xml文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.boottest.dao.TestDao">
<select id="selectTest" resultType="java.lang.String">
SELECT test_name FROM test WHERE id='1'
</select>
</mapper>
这时候发现没有配置数据库。所以要添加properties文件来配置
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
mybatis.mapper-locations=classpath:mapper/*.xml
注意,你在xml文件里写的sql语句一定要根据自己情况修改,意思就是你所连接的数据库要有那张表,那个字段。同时properties文件里的数据库连接信息也要改成你自己的。
下面开始检测效果。
在service中注入dao,并调用方法,在controller中调用service方法,将返回值返回到页面显示
运行App的main方法,访问网页
说明我数据库的值取到了并且成功返回到前端。
mybati集成结束。我这里使用的是和spring一样的xml文件的形式绑定dao接口和sql,也可以通过纯注解的形式省去xml,但是不方便后期维护sql,所以我没有使用那种方式。
配置log
springboot支持很多种log,我这里选用的是logback
首先需要添加pom中的依赖。我们一开始已经添加好了,所以现在不用再添加了。
添加日志配置的xml
<configuration>
<!--控制台输出格式(带颜色)-->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!-- encoders are by default assigned the type
ch.qos.logback.classic.encoder.PatternLayoutEncoder -->
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS, Asia/Shanghai} %highlight(%5p) --- [%-5t] %cyan(%c{36}): %m%n</pattern>
<!-- 常用的Pattern变量 -->
<!--
<pattern>
%d{yyyy-MM-dd HH:mm:ss} [%level] - %msg%n
Logger: %logger
Class: %class
File: %file
Caller: %caller
Line: %line
Message: %m
Method: %M
Relative: %relative
Thread: %thread
Exception: %ex
xException: %xEx
nopException: %nopex
rException: %rEx
Marker: %marker
%n
</pattern>
-->
</encoder>
</appender>
<!-- RollingFileAppender:滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件 -->
<!-- 以下的大概意思是:1.先按日期存日志,日期变了,将前一天的日志文件名重命名为XXX%日期%索引,新的日志仍然是sys.log -->
<!-- 2.如果日期没有发生变化,但是当前日志的文件大小超过10MB(以下配置的文件大小)时,对当前日志进行分割 重命名-->
<appender name="syslog"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--文件路径 -->
<File>C:/Users/infodba/Desktop/log/sys.log</File>
<!-- rollingPolicy:当发生滚动时,决定 RollingFileAppender 的行为,涉及文件移动和重命名。 -->
<!-- TimeBasedRollingPolicy: 最常用的滚动策略,它根据时间来制定滚动策略,既负责滚动也负责出发滚动 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 活动文件的名字会根据fileNamePattern的值,每隔一段时间改变一次 -->
<!-- 文件名:log/sys.2017-12-05.0.log -->
<fileNamePattern>log/sys.%d.%i.log</fileNamePattern>
<!-- 每产生一个日志文件,该日志文件的保存期限为30天 -->
<maxHistory>30</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!-- maxFileSize:这是活动文件的大小,默认值是10MB,也可以自己设置 -->
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder>
<!-- pattern节点,用来设置日志的输入格式 -->
<pattern>
%d %p (%file:%line\)- %m%n
</pattern>
<!-- 记录日志的编码 -->
<charset>UTF-8</charset> <!-- 此处设置字符集 -->
</encoder>
</appender>
<!-- 控制台输出日志级别 -->
<root level="info">
<appender-ref ref="STDOUT"/>
</root>
<!-- 指定项目中某个包,当有日志操作行为时的日志记录级别 -->
<!-- com.appley为根包,也就是只要是发生在这个根包下面的所有日志操作行为的权限都是DEBUG -->
<!-- 级别依次为【从高到低】:FATAL > ERROR > WARN > INFO > DEBUG > TRACE -->
<logger name="com.bootdemo" level="DEBUG">
<appender-ref ref="syslog"/>
</logger>
</configuration>
在properties文件中引入此xml
这样log就配置完成了。此配置会让log输出在控制台并且在指定位置生成文件。
我的log配置中有写注释,你可以根据自己的需求修改格式,和路径。
控制台日志
生成的日志文件
设置默认欢迎页面
新建一个java类,继承
WebMvcConfigurerAdapter
@Configuration
public class DefaultView extends WebMvcConfigurerAdapter {
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/").setViewName("forward:/index.html");
registry.setOrder(Ordered.HIGHEST_PRECEDENCE);
super.addViewControllers(registry);
}
}
添加static文件夹和html页面(springboot默认是从static路径下找的)
访问8080端口进入首页
这样就可以自定义首页,然后控制后续的跳转。
junit测试
新建项目时自动生成的AppTest.java文件,如果没有也可以自己创建。
需要引入的依赖已开始也已经添加了
添加注解
@SpringBootTest(classes = App.class)
@RunWith(SpringRunner.class)
public class AppTest {
/**
* Rigorous Test :-)
*/
@Autowired
TestService service;
@Autowired
TestDao testDao;
@Test
public void shouldAnswerWithTrue() {
//assertTrue(true);
service.demo();
testDao.selectTest();
}
}
总结
其实idea可以直接新建springboot的项目结构,感兴趣的可以去搜一下。但是我个人觉得这样一步步手动搭建起来更有助于理解springboot的整体架构。同时可以灵活配置自己喜欢的风格。熟悉了之后在用idea直接生成就没有那么陌生。