SpringBoot学习
-
#### 踩过的坑:
-
Ctrl + alt + L:列编辑(不好使(不要放手Ctrl+alt))::::alt+加拉取(在源码模式下)
-
typora的偏好设置里面竟然有恢复之前未保存的文件,太强了,粉了!!!
<!-- 当项目以war包的方式部署到外部Tomcat运行时 -->
<!-- 必须将tomcat标记为provided,阻止将内置的tomcat包打到war包中,以防与外部tomcat容器中的包冲突 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
如果将SpringBoot工程打成war包,放到外部Tomcat中去运行需要做如下配置:
<ol>
<li>将pom打包格式改成war</li>
<li>将spring-boot-starter-tomcat依赖配置成provided</li>
<li>启动类做如下修改</li>
</ol>
在SpringBoot中,默认配置的/**映射到/static。
静态资源映射还有一个配置选项,为了简单这里用.properties方式书写:spring.mvc.static-path-pattern=/** # Path pattern used for static
resources.这个配置会影响默认的/**,例如修改为/static/**后,只能映射如/static/js/sample.js这样的请求(修改前是/js/sample.js)。这个配置只能写一个值,不像大多数可以配置多个用逗号隔开的。
在application.yml文件中严格按照层级结构(按照idea的提示)来书写也不会出错!
SpringBoot视图
Thymeleaf
模板引擎(springBoot中用来取参)
<!--前端页面中-->
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<!--pom.xml中-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
。。。
SpringBoot的运行方式
- 直接在IDEA中运行入口处类
- 通过Spring-boot-maven-plugin打成可执行jar包,通过Java-jar 运行
- 通过mvc spring-boot :run运行
打包部署:
jar包
SpringBoot官方建议通过SpringBoot提供的打包插件将项目打包成一个可执行的jar包(在这个jar包里面已经内置了Tomcat,可以直接当一个web跑),方便部署和管理。
添加编译插件(通过start.spring.io创建的工程默认就有)
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<!-- ... -->
<packaging>jar</packaging>
<!-- ... -->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<fork>true</fork>
</configuration>
</plugin>
</plugins>
</build>
</project>
然后直接通过
$ mvn clean package
$ java -jar target/mymodule-0.0.1-SNAPSHOT.jar
注意, 如果你使用了src/main/webapp目录,打成jar包会忽略掉该目录下的所有文件,这种情况下只能选择打war包的方式
war包
主要分为两步
第一步,修改pom.xml
示例配置:
pom.xml
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<!-- ... -->
<packaging>war</packaging>
<!-- ... -->
<dependencies>
<!-- 必须将tomcat标记为provided,阻止将内置的tomcat包打到war包中,以防与外部tomcat容器中的包冲突 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<!-- ... -->
<!-- Compile -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<!-- 支持JSP -->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
<!-- Test -->
<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>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<useSystemClassLoader>false</useSystemClassLoader>
</configuration>
</plugin>
</plugins>
</build>
</project>
第二步 注册启动类
创建 ServletInitializer.java,继承 SpringBootServletInitializer ,覆盖 configure(),把启动类 Application 注册进去。外部 Web 应用服务器构建 Web Application Context 的时候,会把启动类添加进去。
public class ServletInitializer extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}
}
Mybatis逆向工程插件模板
generatorConfig.xml的配置文件之前已有上传。。
//他需要有个编译时的mysql——springboot内部的是scope是runtime
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.18</version>
</dependency>
<!-- 定义mybatis逆向工程代码生成插件 (生成之后建议注释掉)-->
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.7</version>
<executions>
<execution>
<id>Generate MyBatis Artifacts</id>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
<configuration>
<!-- ${basedir}是maven提供的内置变量,获取的是项目根目录的路径 -->
<!-- 指定自定义配置文件(代码生成工具)路径 -->
<configurationFile>${basedir}/src/main/resources/mybatis/generatorConfig.xml</configurationFile>
<includeCompileDependencies>true</includeCompileDependencies>
<overwrite>true</overwrite>
</configuration>
</plugin>
SpringBoot-SSM整合
第一步:
配置pom.xml以及生成Mybatis逆向工程
第二步
标识启动类
第三步
application.yml配置填写
第四步
开始需求书写(层级就可以开始了)
Thymeleaf模板引擎取代JSP视图
SpringBoot官方建议我们使用Thymeleaf模板引擎取代JSP视图,如果我们就想使用JSP怎么办呢?可以,做好下面几步配置就可以了
第一步:修改pom.xml中的打包方式为war
<project>
...
<packaging>war</packaging>
...
</project>
第二步:添加JSP依赖
<!--配置支持jsp-->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
</dependency>
第三步:配置InternalResourceViewResolver参数
spring:
mvc:
view:
prefix: /WEB-INF/ #配置JSP文件前缀
suffix: .jsp #配置JSP页面后缀
注:
1、jsp页面必须放到webapp目录或webapp/WEB-INF/下
2、如果使用了jsp作为视图,则工程只能打成war包部署(因为jar包不会将webapp目录下的东西打进去)
踩坑ing
mybatis: mapper-locations: classpath:/mybatis/mappers/*.xml
config-location: <!--二者有区别-->
- Date类解决
- 在Spring Boot项目中,使用==@RestController==注解,返回的java对象中若含有date类型的属性,则默认输出为TIMESTAMP时间戳格式
在application.properties配置文件增加以下配置:
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone=GMT+8
#之前的做法是在bean类的date属性上添加注解@JSONFormat("yyyy-MM-dd HH:mm:ss")
- 在Spring Boot项目中,使用==@Controller==注解,储存在Model中的java对象中若含有date类型的属性,则默认是GBK格式
#dates.format()
用来格式化日期时间
${#dates.format(date, 'dd/MMM/yyyy HH:mm')}
${#dates.arrayFormat(datesArray, 'dd/MMM/yyyy HH:mm')}
${#dates.listFormat(datesList, 'dd/MMM/yyyy HH:mm')}
${#dates.setFormat(datesSet, 'dd/MMM/yyyy HH:mm')}
<!--强势——>
<td th:text="${#dates.format(book.publish, 'yyyy-MM-dd HH:mm')}"></td>
@InitBinder
用于在@Controller
中标注于方法,表示为当前控制器注册一个属性编辑器或者其他,只对当前的Controller有效。而@Controller必须显式的存在Date类
@InitBinderpublic void initBinder(ServletRequestDataBinder binder) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); binder.registerCustomEditor(Date.class, new CustomDateEditor(sdf, true));
}
/**
* 全局handler前日期统一处理
* @author zhanghang
* @date 2018/1/11
*/
@Component
public class DateConverterConfig implements Converter<String, Date> {
private static final List<String> formarts = new ArrayList<>(4);
static{
formarts.add("yyyy-MM");
formarts.add("yyyy-MM-dd");
formarts.add("yyyy-MM-dd hh:mm");
formarts.add("yyyy-MM-dd hh:mm:ss");
}
@Override
public Date convert(String source) {
String value = source.trim();
if ("".equals(value)) {
return null;
}
if(source.matches("^\\d{4}-\\d{1,2}$")){
return parseDate(source, formarts.get(0));
}else if(source.matches("^\\d{4}-\\d{1,2}-\\d{1,2}$")){
return parseDate(source, formarts.get(1));
}else if(source.matches("^\\d{4}-\\d{1,2}-\\d{1,2} {1}\\d{1,2}:\\d{1,2}$")){
return parseDate(source, formarts.get(2));
}else if(source.matches("^\\d{4}-\\d{1,2}-\\d{1,2} {1}\\d{1,2}:\\d{1,2}:\\d{1,2}$")){
return parseDate(source, formarts.get(3));
}else {
throw new IllegalArgumentException("Invalid boolean value '" + source + "'");
}
}
/**
* 格式化日期
* @param dateStr String 字符型日期
* @param format String 格式
* @return Date 日期
*/
public Date parseDate(String dateStr, String format) {
Date date=null;
try {
DateFormat dateFormat = new SimpleDateFormat(format);
date = dateFormat.parse(dateStr);
} catch (Exception e) {
}
return date;
}
}
//还没有验证对错、、、、、、、
-
layUI中的表格cols[[
{}
]]和thymeleaf中的内联表达式冲突需要这样书写,简单改变下冲突cols[
[{
}]
]
-
banner文件
/*SpringApplication.run(SpringbootSsmApplication.class, args);*/
//对比
//关闭banner
SpringApplicationBuilder sub
= new SpringApplicationBuilder(SpringbootSsmApplication.class);
sub.bannerMode(Banner.Mode.OFF).run(args);
- 好玩的
table, tr, td, th {
/*用来决定表格的边框是分开的还是合并的:collapse、separate*/
border-collapse: separate;
}
<!--引入css使用link-->
/*在HTML中,<link>标签没有结束标签。rel属性用于定义当前文档与被链接文档之间的关系。*/
<link rel="stylesheet" href="/static/css/table_y.css">
<!--引入js使用script-->
<script type="text/javascript" src="myscripts.js"></script>
注释:外部文件不能包含 <script> 标签!
导入import:
SpringBoot 2.1版本解决Tomcat最大支持10M文件上传问题
@Bean
public TomcatServletWebServerFactory tomcatEmbedded() {
TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory();
tomcat.addConnectorCustomizers((TomcatConnectorCustomizer) connector -> {
if ((connector.getProtocolHandler() instanceof AbstractHttp11Protocol<?>)) {
//-1 means unlimited
((AbstractHttp11Protocol<?>) connector.getProtocolHandler()).setMaxSwallowSize(-1);
}
});
return tomcat;
}
SpringBoot 1.5版本解决Tomcat最大只能上传10M文件问题
@Bean
public TomcatEmbeddedServletContainerFactory tomcatFactory() {
TomcatEmbeddedServletContainerFactory tomcatFactory = new TomcatEmbeddedServletContainerFactory();
tomcatFactory.addConnectorCustomizers((TomcatConnectorCustomizer) connector -> {
if ((connector.getProtocolHandler() instanceof AbstractHttp11Protocol<?>)) {
//-1 means unlimited
((AbstractHttp11Protocol<?>) connector.getProtocolHandler()).setMaxSwallowSize(-1);
}
});
return tomcatFactory;
}