一、从官网下载源码
地址:https://start.spring.io/

填写项目信息
二、idea 创建项目

sdk选择jdk

填写项目信息

选择配置信息

http://maven.apache.org/download.cgi

项目配置maven信息
<!-- 核心包 -->
<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>
<!--Spring Boot Configuration Annotation Processor not found in classpath-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<!-- log4j -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j</artifactId>
<version>1.3.8.RELEASE</version>
</dependency>
<!-- aop -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<!-- json -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.1.37</version>
</dependency>
# 服务器端口号
server.port=8080
# 超时时间,单位:时(h),分(m),秒(s)
server.servlet.session.timeout=60m
# 上下文路径
server.servlet.context-path=/
# 发生错误时跳转的地址
server.error.path=/error
# tomcat 最大线程数
server.tomcat.max-threads=200
# tomcat 编码格式
server.tomcat.uri-encoding=utf-8
# 配置静态资源地址(js/css/image)
spring.mvc.static-path-pattern=/static/**
# 配置国际化
#spring.messages.basename=/package/name
spring.messages.encoding=UTF-8
import com.alibaba.fastjson.JSON;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import springboot.wjx.mapper.UserMapper;
@SpringBootTest
@RunWith(SpringRunner.class)
public class UserInfoTest { -> 测试用例
@Autowired
private UserMapper userMapper;
@Test
public void insertUserTest() throws Exception {
System.out.println(JSON.toJSON(userMapper.selectUserList(null)));
}
}
三、项目打包
- JAR 形式(多配置文件遵循application-{profiles}的命名规则)
application.properties
server.port=8080
spring.profiles.active=prod
application-dev.properties
server.port=8081
application-prod.properties
server.port=8082
application.yml
server:
port: 8080
spring:
profiles:
active: dev
---
application-dev.yml
server:
port: 8081
spring:
profiles: dev
---
application-prod.yml
server:
port: 8082
spring:
profiles: prod
<packaging>jar</packaging>
<build>
<finalName>wjx</finalName> -> JAR包的名称
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.1.1.RELEASE</version>
<configuration>
<mainClass>springboot.wjx.WjxApplication</mainClass>
<layout>JAR</layout>
</configuration>
</plugin>
</plugins>
</build>
public class ServletInitializer extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(WjxApplication.class);
}
}
@SpringBootApplication
public class WjxApplication {
public static void main(String[] args) {
SpringApplication.run(WjxApplication.class, args);
}
}
配置并运行批处理文件(start.bat)
set PATH=D:\Program Files\Java\jdk1.8.0_92\bin;C:\WINDOWS;C:\WINDOWS\COMMAND
set classpath=.;D:\Program Files\Java\jdk1.8.0_92\lib\tools.jar;
D:\Program Files\Java\jdk1.8.0_92\lib\dt.jar
java -jar wjx.jar --spring.profiles.active=dev
设置开机自启动项目
1、组合快捷键(win+r)打开运行窗口
2、输入指令(gpedit.msc)并确定
3、在策略窗口中依次选择:计算器配置\Windows配置\脚本(启动/关机)
4、双击"启动"选项,将启动项目的文件(start.bat)加入脚本列表
<packaging>war</packaging>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions> -> 屏蔽SpringBoot自带的Tomcat,方法一
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency> -> 屏蔽SpringBoot自带的Tomcat,方法二
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
<warName>${project.artifactId}</warName>
</configuration>
</plugin>
</plugins>
<finalName>wjx</finalName>
</build>
@SpringBootApplication
public class WarApplication extends SpringBootServletInitializer { -> 重写启动类
public static void main(String[] args) {
SpringApplication.run(WarApplication.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(WarApplication.class);
}
}
<build>
<plugins>
<plugin> -> 打包时移除第三方依赖
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<layout>ZIP</layout>
<includes>
<include>
<groupId>non-exists</groupId>
<artifactId>non-exists</artifactId>
</include>
</includes>
</configuration>
</plugin>
<plugin> -> 复制依赖包至指定路径
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>target/lib</outputDirectory>
<excludeTransitive>false</excludeTransitive>
<stripVersion>false</stripVersion>
<includeScope>runtime</includeScope>
</configuration>
</execution>
</executions>
</plugin>
<plugin> -> 忽略测试代码
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
</plugins>
</build>
<build>
<resources> -> 优先级 (excludes > includes)
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering> -> 开启过滤
<includes> -> 不过滤
<include>application.yml</include>
<include>application-${profiles.active}.yml</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<filtering>false</filtering> -> 关闭过滤
<excludes> -> 过滤
<exclude>static/**</exclude>
<exclude>mapper/**</exclude>
<exclude>templates/**</exclude>
</excludes>
</resource>
</resources>
</build>
<build>
<plugins>
<plugin> -> 复制静态资源至指定路径
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<executions>
<execution>
<id>copy-resources</id>
<phase>package</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering> -> 开启过滤
<includes>
<include>application.yml</include>
<include>application-${profiles.active}.yml</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<filtering>false</filtering> -> 关闭过滤
<includes>
<include>static/**</include>
<include>mapper/**</include>
<include>templates/**</include>
</includes>
</resource>
</resources>
<outputDirectory> -> 导出目录地址
${project.build.directory}/resources
</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
使用绝对路径的方式请求静态资源('\'和'/'一样)
spring.resources.static-locations = file:D:\resources\static\**
spring.thymeleaf.prefix = file:D:\resources\templates\thymeleaf\
spring.freemarker.template-loader-path = file:D:\templates\freemarker\
把资源文件和JAR包放在相同的目录下,运行批处理文件(start.bat)
java -jar -Dloader.path=resources,lib wjx.jar
四、日志记录
<dependency> -> LogBack框架(SpringBoot默认集成)
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</dependency>
logging.path = D:\log -> 存储位置
logging.file = spring.log -> 文件名
logging.level.root = INFO -> 记录项目所有INFO级别或以上的日志
logging.level..package = INFO -> 记录项目某个包INFO级别或以上的日志
logging.pattern.console = %d{yyyy/MM/dd-HH:mm:ss} -> 日志输出格式
[%thread] %-5level %logger- %msg %n
logging.pattern.file = %d{yyyy/MM/dd-HH:mm}
[%thread](进程名) %-5level(日志级别) %logger-(类名) %msg(日志消息) %n(换行符)
private static final Logger LOG = LoggerFactory.getLogger(LogConfig.class);
日志级别 : TARCE < DEBUG < INFO < WARN < ERROR < FATAL
五、模板引擎
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
# thymeleaf static resources setting
spring.thymeleaf.prefix=classpath:/templates/thymeleaf/
spring.thymeleaf.suffix=.html
spring.thymeleaf.mode=HTML
# 引用H5 指定thymeleaf的版本号(pom)
# spring.thymeleaf.mode=HTML5
spring.thymeleaf.encoding=UTF-8
spring.thymeleaf.servlet.content-type=text/html
spring.thymeleaf.cache=false
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
# freemarket static resources setting
spring.freemarker.template-loader-path=classpath:/templates/freemarker/
spring.freemarker.cache=false
spring.freemarker.charset=UTF-8
spring.freemarker.check-template-location=true
spring.freemarker.content-type=text/html
spring.freemarker.expose-request-attributes=true
spring.freemarker.expose-session-attributes=true
spring.freemarker.request-context-attribute=request
spring.freemarker.suffix=.ftl
六、Redis 缓存池
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
# 数据库索引
spring.redis.database=1
# 服务器地址
spring.redis.host=192.168.1.191
# 服务器连接端口
spring.redis.port=6379
# 服务器连接密码
spring.redis.password=
# 连接池最大连接数(负数表示没限制)
spring.redis.jedis.pool.max-active=1000
# 连接池最大阻塞时间
spring.redis.jedis.pool.max-wait=-1ms
# 连接池最大空闲连接
spring.redis.jedis.pool.max-idle=10
# 连接池最小空闲连接
spring.redis.jedis.pool.min-idle=2
# 连接超时时间
spring.redis.timeout=0ms
七、热部署
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<!-- idea:Settings->Build,Execution,Deployment->Compiler -->
<!-- checked the Build-project-automatically checkbox -->
<configuration>
<fork>true</fork> -> 配置devtools生效
</configuration>
</plugin>
# 热部署开关
spring.devtools.restart.enabled=true
# 设置重启的目录
spring.devtools.restart.additional-paths=src/main/java
# 排除修改后需要重启的目录
spring.devtools.restart.exclude=static/**
# restart 类加载 include 进去的 jar 包
restart.include.mapper=/mapper-[\\w-\\.]+jar
restart.include.pagehelper=/pagehelper-[\\w-\\.]+jar
八、数据源
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.0</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.9</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.41</version>
</dependency>
spring.datasource.url=jdbc:mysql://localhost:3306/springboot?userUnicode=true&characterEncoding=UTF8&useSSL=false
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.druid.initial-size=1
spring.datasource.druid.min-idle=1
spring.datasource.druid.max-active=20
spring.datasource.druid.max-wait=60000
spring.datasource.druid.time-between-eviction-runs-millis=60000
spring.datasource.druid.test-on-borrow=true
九、Mybatis 持久层
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.1</version>
</dependency>
mybatis.type-aliases-package=springboot.wjx.pojo
mybatis.mapper-locations=classpath*:mapper/*.xml
@MapperScan(basePackages = {"springboot.wjx.mapper"}) -> SpringBoot启动类
十、WebMvcConfigurer 组件
public class SpringBootConfigurer implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new HandlerInterceptor() {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
response.sendRedirect("/login"); -> 请求被拦截后通过response响应客户端
return false; -> 在请求前执行,默认拦截
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
Controller方法调用之后 ~ DispatcherServlet渲染视图之前
这段时间内可以对ModelAndView进行操作
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("请求已处理完毕");
}
})
.addPathPatterns("/**") -> 符合规则的请求进入拦截器
.excludePathPatterns("/login"); -> 符合规则的请求不进入拦截器
}
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/login") -> 请求路径
.setViewName("login"); -> 跳转页面
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) { -> 静态资源映射
registry.addResourceHandler("/static/**") -> 外部请求路径
.addResourceLocations("classpath:/static/"); -> 内部访问路径
}
@Override
public void configureViewResolvers(ViewResolverRegistry registry) { -> 视图解析器
registry.jsp("/thymeleaf/",".html"); -> 方法一
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
internalResourceViewResolver.setPrefix("/thymeleaf/");
internalResourceViewResolver.setSuffix(".html");
registry.viewResolver(internalResourceViewResolver); -> 方法二
}
@Override
public void addCorsMappings(CorsRegistry registry) { -> 跨域访问
registry.addMapping("/**")
.allowedOrigins("*")
.allowCredentials(true)
.allowedMethods("GET", "POST")
.maxAge(3600 * 24);
}
}
十一、多模块分包打包
<?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.wjx</groupId>
<artifactId>wjx</artifactId>
<version>1.0.0</version>
<packaging>pom</packaging>
<name>demo-parent</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.1.RELEASE</version>
</parent>
<modules> -> 管理子模块
<module>wjx-web</module>
<module>wjx-service</module>
<module>wjx-dao</module>
</modules>
<properties>
<encoding>UTF-8</encoding> -> 自定义属性名
<java.version>1.8</java.version>
<springboot.version>2.1.1.RELEASE</springboot.version>
</properties>
<dependencies> -> 子模块公用依赖在父配置声明
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>${springboot.version}</version> -> 引入版本属性
</dependency>
<build>
<plugins>
<plugin> -> 修改打包方式
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
<encoding>${encoding}</encoding>
</configuration>
</plugin>
</plugins>
</build>
</project>
<?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">
<parent> -> 对应父POM配置
<groupId>com.wjx</groupId>
<artifactId>wjx</artifactId>
<version>1.0.0</version>
<relativePath>../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
<packaging>jar</packaging>
<artifactId>wjx-web</artifactId>
<dependencies>
<dependency> -> 模块间关联
<groupId>com.wjx</groupId>
<artifactId>wjx-service</artifactId>
<version>1.0.0</version>
<type>jar</type> -> 依赖的打包方式
</dependency>
</dependencies>
<build>
<plugins>
<plugin> -> 项目打包
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<fork>true</fork> -> 热部署生效
<mainClass>com.wjx.SpringBootApplication</mainClass> -> 指定启动类
<layout>ZIP</layout>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal> -> 把依赖也打包
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
<?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">
<parent> -> 对应父POM配置
<groupId>com.wjx</groupId>
<artifactId>wjx</artifactId>
<version>1.0.0</version>
<relativePath>../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>wjx-service</artifactId>
<dependencies>
<dependency> -> 模块间关联
<groupId>com.wjx</groupId>
<artifactId>wjx-dao</artifactId>
<version>1.0.0</version>
<type>jar</type> -> 依赖的打包方式
</dependency>
</dependencies>
</project>
<?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">
<parent> -> 对应父POM配置
<groupId>com.wjx</groupId>
<artifactId>wjx</artifactId>
<version>1.0.0</version>
<relativePath>../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>wjx-dao</artifactId>
</project>
网友评论