美文网首页
SpringBoot 框架

SpringBoot 框架

作者: 潜心之力 | 来源:发表于2019-01-04 18:52 被阅读0次
一、从官网下载源码

地址: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)加入脚本列表
  • WAR 形式
<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
五、模板引擎
  • thymeleaf
<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
  • freemarker
<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);
    }
}
十一、多模块分包打包
  • 父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.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>
  • 子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">
    <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>

相关文章

网友评论

      本文标题:SpringBoot 框架

      本文链接:https://www.haomeiwen.com/subject/wnpkrqtx.html