更轻量级框架Springboot学习

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的运行方式

  1. 直接在IDEA中运行入口处类
  2. 通过Spring-boot-maven-plugin打成可执行jar包,通过Java-jar 运行
  3. 通过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: <!--二者有区别-->

  1. 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;
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值