更轻量级框架Springboot学习

SpringBoot学习

  • #### 踩过的坑:

  • Ctrl + alt + L:列编辑(不好使(不要放手Ctrl+alt))::::alt+加拉取(在源码模式下)

  • typora的偏好设置里面竟然有恢复之前未保存的文件,太强了,粉了!!!


        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-tomcatartifactId>
            <scope>providedscope>
        dependency>



如果将SpringBoot工程打成war包,放到外部Tomcat中去运行需要做如下配置:
 <ol>
     <li>将pom打包格式改成warli>
     <li>将spring-boot-starter-tomcat依赖配置成providedli>
     <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">

		<dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-thymeleafartifactId>
        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创建的工程默认就有)


<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>jarpackaging>
    
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-maven-pluginartifactId>
                <configuration>
                    <fork>truefork>
                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


<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>warpackaging>
    
    <dependencies>
    
    <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-tomcatartifactId>
            <scope>providedscope>
        dependency>
        
        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-webartifactId>
        dependency>
        <dependency>
            <groupId>javax.servletgroupId>
            <artifactId>jstlartifactId>
        dependency>
            
    <dependency>
            <groupId>org.apache.tomcat.embedgroupId>
            <artifactId>tomcat-embed-jasperartifactId>
            <scope>providedscope>
        dependency>
        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-testartifactId>
            <scope>testscope>
        dependency>
    dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-maven-pluginartifactId>
            plugin>
            <plugin>
                <groupId>org.apache.maven.pluginsgroupId>
                <artifactId>maven-surefire-pluginartifactId>
                <configuration>
                    <useSystemClassLoader>falseuseSystemClassLoader>
                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>mysqlgroupId>
            <artifactId>mysql-connector-javaartifactId>
            <version>8.0.18version>
        dependency>


            <plugin>
                <groupId>org.mybatis.generatorgroupId>
                <artifactId>mybatis-generator-maven-pluginartifactId>
                <version>1.3.7version>
                <executions>
                    <execution>
                        <id>Generate MyBatis Artifactsid>
                        <goals>
                            <goal>generategoal>
                        goals>
                    execution>
                executions>
                <configuration>
                    
                    
                    <configurationFile>${basedir}/src/main/resources/mybatis/generatorConfig.xmlconfigurationFile>
                    <includeCompileDependencies>trueincludeCompileDependencies>
                    <overwrite>trueoverwrite>
                configuration>
            plugin>

SpringBoot-SSM整合

第一步:

配置pom.xml以及生成Mybatis逆向工程

第二步

标识启动类

第三步

application.yml配置填写

第四步

开始需求书写(层级就可以开始了)

Thymeleaf模板引擎取代JSP视图

SpringBoot官方建议我们使用Thymeleaf模板引擎取代JSP视图,如果我们就想使用JSP怎么办呢?可以,做好下面几步配置就可以了

第一步:修改pom.xml中的打包方式为war


     ...
    war
     ...

第二步:添加JSP依赖



    org.apache.tomcat.embed
    tomcat-embed-jasper


第三步:配置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;
}


 /*在HTML中,标签没有结束标签。rel属性用于定义当前文档与被链接文档之间的关系。*/  
"stylesheet" href="/static/css/table_y.css">








注释:外部文件不能包含 
                    
                    

你可能感兴趣的:(Java)