zoukankan      html  css  js  c++  java
  • SpringBoot开发及学习

    SpringBoot是Spring新出的一个框架,他的目的一如始初- 简化开发。我们开发项目的时候,为了让项目运行起来,我们要考虑很多架构、配置、依赖等问题,这些问题其实每个项目都要考虑,而且每个项目的开发都有固定的模版,这些重复的工作是每个项目的样板代码,SpringBoot做的就是帮我们完成这些重复行的工作,让我们只关注业务逻辑。

    主要帮我们完成了以下几个部分:

    1、自动装配:针对Spring应用程序常见的应用功能,SpringBoot自动提供相关的配置。

    2、起步依赖:告诉SpringBoot需要什么功能后,他能帮我们引入需要的jar包。

    3、命令行界面:这个这里不介绍。

    4、Actuator:监控观察你的程序运行。

    接下来,我们创建一个简单的SpringBoot应用:

    一、创建骨架

    我们要使用Spring Initializr 来生成一个项目框架,可以通过sts、idea、SpringBoot CLI和web界面来完成Spring Initializr 的工作,我们这里选用的是web界面,访问网址:http://start.spring.io/

    根据你的情况,填写表单,点击generate Project 按钮,生成项目框demo.zip并下载到本地。这个框架除了业务代码,该有的都有了。将demo.zip复制到sts工作空间,解压后,删除多余的代码,只留下src文件夹和pom.xml文件,在sts中通过引入maven项目的方式引入demo项目。

            

    pom.xml报错,原因是spring-boot-starter-parent默认用的是2.1.3,这里有的jar我的私服上下载不到,改成低点的版本2.0.2问题就解决了。如果你连接的是中央仓库,且网络通畅,是不会有这个问题的。

    我们在Spring initializr中选择了web和mysql,给我们生成的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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.0.2.RELEASE</version>
            <relativePath /> <!-- lookup parent from repository -->
        </parent>
        <groupId>com.example</groupId>
        <artifactId>demo</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>demo</name>
        <description>Demo project for Spring Boot</description>
    
        <properties>
            <java.version>1.8</java.version>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <scope>runtime</scope>
            </dependency>
            <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>
            </plugins>
        </build>
    
    </project>
    pom.xml

    我们看的他给我们生成的项目结构是这样的,使用的jdk版本是1.8。(需要强调的是,SpringBoot使用的jdk版本要是1.8或高于1.8)

    和我们以往的web项目比,最大的不同应该就是我们的项目里居然没有了web.xml,打包类型也变成了jar。那这样行不行呢?我们写个简单的action,启动一下应用试试。

                          

    这里要注意的是,springBoot已经给我们内嵌了一个tomcat,所以我们不需要自己再搭建一个,因为是内置tomcat,我们的项目访问也有一点不同就是,访问的时候不需要加上项目名了,直接访问资源就可以,这里我们直接访问http://localhost:8080  就可以进入我们action。

    启动:选中项目-> 右键debug as -> spring Boot app  (其他启动方式可以参考https://my.oschina.net/oosc/blog/1627384)

         打开浏览器,输入:http://localhost:8080      

    既然成功了,我们来逐一介绍一下,他给我们生成的东西都是干啥的:

    1、  2、application.properties默认是空的    3、

    这是为我们生成了一个基本骨架,那我们接下来要看,怎么在其中开发,开发之后怎么部署应用。我们来通过开发一个ssm框架的web项目来介绍具体操作。

    二、开发应用

    1、自定义配置springBoot,使其支持jsp(SpringBoot虽然支持JSP,但是官方不推荐使用,推荐使用thymeleaf)

      1)、配置application.properties

    #关闭默认模板引擎
    spring.thymeleaf.cache=false
    spring.thymeleaf.enabled=false
    
    #jsp 支持
    spring.mvc.view.prefix=/WEB-INF/views/
    spring.mvc.view.suffix=.jsp

      2)、加入依赖(切记:这三个依赖都是必须的)

                <!--jsp支持  start-->
            <!-- servlet 依赖. -->
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>javax.servlet-api</artifactId>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>jstl</artifactId>
            </dependency>
            <dependency>
                <groupId>org.apache.tomcat.embed</groupId>
                <artifactId>tomcat-embed-jasper</artifactId>
                <scope>provided</scope>
            </dependency>
            <!--jsp支持  end-->        
    pom.xml添加依赖

      3)、控制层建议使用@Controller,不要使用@RestController,毕竟不是每一个方法都返回JSON的,有的需要跳转到界面。

    package com.example.demo.controller;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    
    /**
     * @author thc
     * @E-mail  2353635701@qq.com
     * @date 2019年2月19日 下午3:12:03 
     * @Description 类描述
     */
    @Controller
    public class DemoController {
    
        @RequestMapping(value = {"/", "/view"} ,method=RequestMethod.GET)
        public String helloworld() {
            System.out.println("helloworld!!");
            return "index";
        }
    }
    java action代码

      4)、 像往常的web项目一样,在文件夹src下创建mainwebappWEB-INFviewsindex.jsp测试页面。

            

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>index</title>
    <!-- Tell the browser to be responsive to screen width -->
    <meta
        content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"
        name="viewport">
    </head>
    <body class="hold-transition login-page">
        <center>
            <h3>你好,欢迎 !!!</h3>
        </center>
    </body>
    </html>
    index.jsp 页面代码

    启动应用,访问http://localhost:8080,测试成功!!

    2、支持mybatis做数据库持久化

      1)、添加依赖

    <!-- mybatis start -->
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>1.3.2</version>
            </dependency>
            <!-- mysql 连接 -->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <scope>runtime</scope>
            </dependency>
            <!-- mybatis end -->
    支持mybatis的相关依赖

      备份程序!!! 

        2)、添加自定义配置(添加mybatis支持方法一,本人不支持使用,官方配置文档不好找,反正我是没找到全部的数据库连接池配置参数)

        修改application.properties,添加mybatis和dataSource相关配置

    #使用mybatis连接数据库信息
    #mybatis自定义配置信息
    mybatis.mapper-locations = classpath:mybatis/mapper/*Mapper.xml
    mybatis.config-location = classpath:mybatis/mybatis_config.xml
    mybatis.type-aliases-package = com.example.demo.dao.db
    #数据库连接信息
    spring.datasource.driver-class-name= com.mysql.jdbc.Driver
    spring.datasource.url = jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8
    spring.datasource.username = root
    spring.datasource.password = 123
    添加使用mybatis连接数据库信息

        写样例测试,数据库表可以随意创建两张,添加测试程序

        a、在src/main/resources下创建mybatis文件夹,在mybatis文件夹下创建mybatis_config.xml(内容如下)文件、generator_test.xml文件(方向工程生成文件内容如下)和mapper文件夹(这个要与application.properties中的配置一致classpath:mybatis/mapper),在src/main/java创建com.example.demo.dao.db包,使用mybatis方向工程生成数据代码。

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE configuration
    PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration>        
        
    </configuration>
    mybatis_config.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE generatorConfiguration
            PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
            "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
    
    <!-- 配置Run As Maven build : Goals 参数 : mybatis-generator:generate -Dmybatis.generator.overwrite=true -->
    <!-- 配置 tableName,使用 Run As Maven build 生成 dao model 层 -->
    <generatorConfiguration>
        <!-- 配置文件路径 -->
        <!-- <properties url="${mybatis.generator.generatorConfig.properties}"/> -->
        <!-- <properties resource="generatorConfig.properties"/> -->
    
        <!--数据库驱动包路径 -->
        <classPathEntry
            location="E:m2
    epositorymysqlmysql-connector-java5.1.46mysql-connector-java-5.1.46.jar" />
        <context id="EditionManagerTables" targetRuntime="MyBatis3">
            <!-- mybatio分页插件 -->
            <plugin type="org.mybatis.generator.plugins.RowBoundsPlugin"></plugin>
            <!--关闭注释 -->
            <commentGenerator>
                <property name="suppressAllComments" value="true" /><!-- 是否取消注释 -->
                <property name="suppressDate" value="true" /> <!-- 是否生成注释代时间戳 -->
            </commentGenerator>
    
            <!--数据库连接信息 -->
            <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                connectionURL="jdbc:mysql://localhost:3306/test" userId="root"
                password="123">
            </jdbcConnection>
    
            <!-- 类型转换 -->
            <javaTypeResolver>
                <!-- 是否使用bigDecimal, false可自动转化以下类型(Long, Integer, Short, etc.) -->
                <property name="forceBigDecimals" value="false" />
            </javaTypeResolver>
    
            <!--生成的model 包路径 -->
            <javaModelGenerator targetPackage="com.example.demo.dao.db.model"
                targetProject="demo/src/main/java">
                <!-- 是否在当前路径下新加一层schema,eg:fase路径cn.ffcs.test.domain", true:cn.ffcs.test.domain".[schemaName] -->
                <property name="enableSubPackages" value="ture" />
                <!-- 是否针对string类型的字段在set的时候进行trim调用 -->
                <property name="trimStrings" value="true" />
                <!-- <property name="rootClass" value="com.sinosig.xb.rms.base.BaseEntity"/> -->
            </javaModelGenerator>
    
            <!--生成xml mapper文件 路径 -->
            <sqlMapGenerator targetPackage="mybatis.mapper"
                targetProject="demo/src/main/resources">
                <!-- 是否在当前路径下新加一层schema,eg:fase路径cn.ffcs.test.domain", true:cn.ffcs.test.domain".[schemaName] -->
                <property name="enableSubPackages" value="ture" />
            </sqlMapGenerator>
    
            <!-- 生成的Dao接口 的包路径 -->
            <javaClientGenerator type="XMLMAPPER"
                targetPackage="com.example.demo.dao.db" targetProject="demo/src/main/java">
                <property name="enableSubPackages" value="ture" />
                <!-- baseDao -->
                <!-- <property name="rootInterface" value="com.xb.alert.platform.db.dao.BaseDao" 
                    /> -->
            </javaClientGenerator>
    
            <!--对应数据库表名 -->
            <!-- schema即为数据库名 tableName为对应的数据库表 domainObjectName要生成的实体类名 enable*ByExample是否生成 
                example类 -->
            <!-- <table tableName="ts_user" schema="" enableInsert="true" -->
            <!-- <table tableName="tp_%" schema="" enableInsert="true" useGeneratedKeys="true" 
                keyProperty="id" -->
            <!-- <table tableName="te_employee_info" schema="" enableInsert="true" -->
            <!-- <table tableName="%" schema="" enableInsert="true" -->
            <table tableName="%" schema="" enableInsert="true"
                enableCountByExample="true" enableUpdateByExample="true"
                enableDeleteByExample="true" enableSelectByExample="true"
                selectByExampleQueryId="true">
                <!-- enableCountByExample="true" enableUpdateByExample="false" enableDeleteByExample="false" -->
                <!-- enableSelectByExample="true" selectByExampleQueryId="true"> -->
                <!-- 忽略列,不生成bean 字段 <ignoreColumn column="FRED" /> -->
                <!-- 指定列的java数据类型 <columnOverride column="LONG_VARCHAR_FIELD" jdbcType="VARCHAR" 
                    /> -->
            </table>
        </context>
    </generatorConfiguration>
    mybatis方向工程文件generator_test.xml

        

        b、创建service层:创建包com.example.demo.service、com.example.demo.service.impl及接口TestDemoService和实现类TestDemoServiceImpl如下:

         

    package com.example.demo.service;
    
    import com.example.demo.dao.db.model.TsUser;
    
    public interface TestDemoService {
    
        public boolean testTransactional();
        public TsUser selectByPrimaryKey(int id);
    }
    service层接口TestDemoService.java代码
    package com.example.demo.service.impl;
    
    import javax.annotation.Resource;
    
    import org.springframework.stereotype.Service;
    import org.springframework.transaction.annotation.Transactional;
    
    import com.example.demo.dao.db.TdScoreMapper;
    import com.example.demo.dao.db.TsUserMapper;
    import com.example.demo.dao.db.model.TdScore;
    import com.example.demo.dao.db.model.TsUser;
    import com.example.demo.service.TestDemoService;
    
    @Service
    public  class TestDemoServiceImpl implements  TestDemoService{
        @Resource
        TsUserMapper mapper;
        
        @Resource
        TdScoreMapper scMapper;
        
        public TsUser selectByPrimaryKey(int id){
            return mapper.selectByPrimaryKey(id);
        }
        
        
        @Transactional
        public boolean testTransactional(){
            
            try {
                TsUser tu = new TsUser();
                tu.setId(1);
                tu.setName("张三100");
                mapper.updateByPrimaryKey(tu);
                TdScore sc = new TdScore();
                sc.setId(1);
                sc.setScore(100);
                scMapper.updateByPrimaryKey(sc);
            } catch (Exception e) {
                e.printStackTrace();
            }
            
            return true;
        }
    }
    Service层实现类TestDemoServiceImpl代码

        c、添加修改action代码如下

    package com.example.demo.controller;
    
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    
    import com.example.demo.dao.db.model.TsUser;
    import com.example.demo.service.TestDemoService;
    
    /**
     * @author thc
     * @E-mail  2353635701@qq.com
     * @date 2019年2月19日 下午3:12:03 
     * @Description 类描述
     */
    @Controller
    public class DemoController {
        @Autowired
        TestDemoService service;
    
        @RequestMapping(value = {"/", "/view"} ,method=RequestMethod.GET)
        public String helloworld() {
            System.out.println("helloworld!!");
            service.testTransactional();
            // 查询数据库
            TsUser tu = service.selectByPrimaryKey(1);
            System.out.println("数据库查出用户名" + tu.getName());
            return "index";
        }
    }
    DemoController 测试数据库连接成功代码

         d、修改应用启动入口DemoApplication.java,添加@EnableTransactionManagement注解,用来支持spring事物;添加@MapperScan("com.example.demo.dao.db"),用来配置扫描**Mapper接口,也可以使用@Mapper注解,二选一(注解写法如下第二张截图)

               

      e、启动测试:控制台打印用户名,成功!!

        

       备份程序!!!! 因为这个也是用来支持mybaits的介绍,和上面的操作重复了,所有我们导入之前备份的程序,再做之下操作。

      3)、支持读取自定义的配置文件(添加mybatis支持方法二,这个学习成本很小,老方式配置DataSource参数就可以了)

        这个操作就是使用springBoot对xml配置文件的支持,直接用程序读我们原来的mybaits配置文件(官方文档  https://docs.spring.io/spring-boot/docs/2.1.3.RELEASE/reference/htmlsingle/#using-boot-importing-xml-configuration)

        

        a、在src/main/resources下创建mybatis文件夹,在mybatis文件夹下创建mybatis_config.xml(内容如下)文件、generator_test.xml文件(方向工程生成文件内容如下)和mapper文件夹(这个要与application.properties中的配置一致classpath:mybatis/mapper),在src/main/java创建com.example.demo.dao.db包,使用mybatis方向工程生成数据代码。

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
        xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
        xmlns:p="http://www.springframework.org/schema/p"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
        http://www.springframework.org/schema/context 
        http://www.springframework.org/schema/context/spring-context-3.0.xsd
        http://www.springframework.org/schema/aop 
        http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
        http://www.springframework.org/schema/tx 
        http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
    
    
        <!-- 自动扫描 -->
        <!-- <context:component-scan base-package="com.sinosig.xb.em.*" /> -->
    
        <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
            destroy-method="close">
            <property name="driverClassName" value="com.mysql.jdbc.Driver" />
            <!-- 基本属性 url、user、password -->
            <property name="url" value="jdbc:mysql://localhost:3306/test?useUnicode=true&amp;characterEncoding=utf-8&amp;zeroDateTimeBehavior=convertToNull" /> 
            <property name="username" value="root" />
            <property name="password" value="123" />
            <!-- 配置初始化大小、最小、最大 -->
            <property name="initialSize" value="1" />
            <property name="minIdle" value="1" />
            <property name="maxActive" value="20" />
            <property name="maxIdle" value="20"></property>
            <!-- 配置获取连接等待超时的时间 -->
            <property name="maxWait" value="60000" />
            <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
            <property name="timeBetweenEvictionRunsMillis" value="60000" />
            <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
            <property name="minEvictableIdleTimeMillis" value="300000" />
            <property name="validationQuery" value="SELECT 'x'" />
            <property name="testWhileIdle" value="true" />
            <property name="testOnBorrow" value="false" />
            <property name="testOnReturn" value="false" />
    
            <!-- 打开PSCache,并且指定每个连接上PSCache的大小 -->
            <property name="poolPreparedStatements" value="false" />
            <!-- 配置监控统计拦截的filters -->
        </bean>
    
    
        <!-- MyBatis配置 -->
        <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
            <property name="dataSource" ref="dataSource" />
            <!-- 自动扫描entity目录, 省掉Configuration.xml里的手工配置 -->
            <!-- <property name="typeAliasesPackage" value="com.hjf.boot.api.domain" 
                /> -->
            <!-- 显式指定Mapper文件位置 -->
            <property name="mapperLocations" value="classpath*:mybatis/mapper/*Mapper.xml" />
        </bean>
        <!-- 扫描basePackage下所有以@MyBatisRepository标识的 接口 -->
        <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
            <property name="basePackage" value="com.example.demo.dao.db" />
            <!-- <property name="annotationClass" value="com.hjf.boot.demo.boot_mybatis.dao.Mapper" 
                /> -->
        </bean>
    
        <!-- 开启事务注解驱动 -->
        <bean id="transactionManager"
            class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
            <property name="dataSource" ref="dataSource" />
        </bean>
    
    
        <!-- 自动扫描,多个包以 逗号分隔 <context:component-scan base-package="com.sinosig.xb.em"/> -->
        <context:component-scan base-package="com.example.demo.dao.db"/>
        <aop:aspectj-autoproxy />
    
    
    
    
    </beans>
    mybatis_config.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE generatorConfiguration
            PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
            "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
    
    <!-- 配置Run As Maven build : Goals 参数 : mybatis-generator:generate -Dmybatis.generator.overwrite=true -->
    <!-- 配置 tableName,使用 Run As Maven build 生成 dao model 层 -->
    <generatorConfiguration>
        <!-- 配置文件路径 -->
        <!-- <properties url="${mybatis.generator.generatorConfig.properties}"/> -->
        <!-- <properties resource="generatorConfig.properties"/> -->
    
        <!--数据库驱动包路径 -->
        <classPathEntry
            location="E:m2
    epositorymysqlmysql-connector-java5.1.46mysql-connector-java-5.1.46.jar" />
        <context id="EditionManagerTables" targetRuntime="MyBatis3">
            <!-- mybatio分页插件 -->
            <plugin type="org.mybatis.generator.plugins.RowBoundsPlugin"></plugin>
            <!--关闭注释 -->
            <commentGenerator>
                <property name="suppressAllComments" value="true" /><!-- 是否取消注释 -->
                <property name="suppressDate" value="true" /> <!-- 是否生成注释代时间戳 -->
            </commentGenerator>
    
            <!--数据库连接信息 -->
            <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                connectionURL="jdbc:mysql://localhost:3306/test" userId="root"
                password="123">
            </jdbcConnection>
    
            <!-- 类型转换 -->
            <javaTypeResolver>
                <!-- 是否使用bigDecimal, false可自动转化以下类型(Long, Integer, Short, etc.) -->
                <property name="forceBigDecimals" value="false" />
            </javaTypeResolver>
    
            <!--生成的model 包路径 -->
            <javaModelGenerator targetPackage="com.example.demo.dao.db.model"
                targetProject="demo/src/main/java">
                <!-- 是否在当前路径下新加一层schema,eg:fase路径cn.ffcs.test.domain", true:cn.ffcs.test.domain".[schemaName] -->
                <property name="enableSubPackages" value="ture" />
                <!-- 是否针对string类型的字段在set的时候进行trim调用 -->
                <property name="trimStrings" value="true" />
                <!-- <property name="rootClass" value="com.sinosig.xb.rms.base.BaseEntity"/> -->
            </javaModelGenerator>
    
            <!--生成xml mapper文件 路径 -->
            <sqlMapGenerator targetPackage="mybatis.mapper"
                targetProject="demo/src/main/resources">
                <!-- 是否在当前路径下新加一层schema,eg:fase路径cn.ffcs.test.domain", true:cn.ffcs.test.domain".[schemaName] -->
                <property name="enableSubPackages" value="ture" />
            </sqlMapGenerator>
    
            <!-- 生成的Dao接口 的包路径 -->
            <javaClientGenerator type="XMLMAPPER"
                targetPackage="com.example.demo.dao.db" targetProject="demo/src/main/java">
                <property name="enableSubPackages" value="ture" />
                <!-- baseDao -->
                <!-- <property name="rootInterface" value="com.xb.alert.platform.db.dao.BaseDao" 
                    /> -->
            </javaClientGenerator>
    
            <!--对应数据库表名 -->
            <!-- schema即为数据库名 tableName为对应的数据库表 domainObjectName要生成的实体类名 enable*ByExample是否生成 
                example类 -->
            <!-- <table tableName="ts_user" schema="" enableInsert="true" -->
            <!-- <table tableName="tp_%" schema="" enableInsert="true" useGeneratedKeys="true" 
                keyProperty="id" -->
            <!-- <table tableName="te_employee_info" schema="" enableInsert="true" -->
            <!-- <table tableName="%" schema="" enableInsert="true" -->
            <table tableName="%" schema="" enableInsert="true"
                enableCountByExample="true" enableUpdateByExample="true"
                enableDeleteByExample="true" enableSelectByExample="true"
                selectByExampleQueryId="true">
                <!-- enableCountByExample="true" enableUpdateByExample="false" enableDeleteByExample="false" -->
                <!-- enableSelectByExample="true" selectByExampleQueryId="true"> -->
                <!-- 忽略列,不生成bean 字段 <ignoreColumn column="FRED" /> -->
                <!-- 指定列的java数据类型 <columnOverride column="LONG_VARCHAR_FIELD" jdbcType="VARCHAR" 
                    /> -->
            </table>
        </context>
    </generatorConfiguration>
    generator_test.xml

        b、添加依赖

    <!-- https://mvnrepository.com/artifact/commons-dbcp/commons-dbcp -->
            <dependency>
                <groupId>commons-dbcp</groupId>
                <artifactId>commons-dbcp</artifactId>
                <version>1.4</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-aop</artifactId>
                <version>4.3.12.RELEASE</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-aspects</artifactId>
                <version>4.3.12.RELEASE</version>
            </dependency>
    pom.xml添加依赖

        c、修改应用启动入口DemoApplication.java

     

      d、重复上面的测试方法,成功!!!!

    3、支持logback配置(有两种读取方式) ,logback的依赖是springBoot的默认起步依赖,所以我们不需要单独引入依赖。

      1)、application.properties直接配置logback日志设置

    # LOGGING
    logging.config= # Location of the logging configuration file. For instance `classpath:logback.xml` for Logback
    logging.exception-conversion-word=%wEx # Conversion word used when logging exceptions.
    logging.file= # Log file name. For instance `myapp.log`
    logging.level.*= # Log levels severity mapping. For instance `logging.level.org.springframework=DEBUG`
    logging.path= # Location of the log file. For instance `/var/log`
    logging.pattern.console= # Appender pattern for output to the console. Only supported with the default logback setup.
    logging.pattern.file= # Appender pattern for output to the file. Only supported with the default logback setup.
    logging.pattern.level= # Appender pattern for log level (default %5p). Only supported with the default logback setup.
    logging.register-shutdown-hook=false # Register a shutdown hook for the logging system when it is initialized.
    官方文档介绍
    #=========== 日志配置·简易(spring boot已经集成logback日志)=========  
    #controller层日志 WARN级别输出  
    #logging.level.com.example.demo.controller=WARN  
    #mapper层 sql日志 DEBUG级别输出  
    #logging.level.com.example.demo.service.impl=DEBUG  
    
    #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  
    #打印运行时sql语句到控制台  
    spring.jpa.show-sql=true  
    # 同时使用,则只有logging.file生效
    # 绝对路径或者相对路径
    logging.file=logs/spring-boot-logging.log  
    # 设置目录
    logging.path=/var/log
    # 级别控制
    # 默认级别为:ERROR、WARN、INFO,10MB时会切分一次
    # 格式logging.level.* = LEVEL
    # TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF
    logging.level.root=info
    logging.level.com.example.demo=info
    logging.level.com.example.demo.controller=WARN
    application.properties文件添加日志配置

      2)、application.properties配置读取logback xml配置文件

        a、application.properties添加配置读取logback.xml

    # 自定义日志配置路径
    logging.config=classpath:logging-config.xml

        b、创建logback.xml文件

          

    <?xml version="1.0" encoding="UTF-8"?>  
    <configuration>      
        <!-- %m输出的信息,%p日志级别,%t线程名,%d日期,%c类的全名,%i索引【从数字0开始递增】,,, -->      
        <!-- appender是configuration的子节点,是负责写日志的组件。 -->  
        <!-- ConsoleAppender:把日志输出到控制台 -->  
        <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">      
            <encoder>      
                <pattern>%d %p (%file:%line)- %m%n</pattern>    
                <!-- 控制台也要使用UTF-8,不要使用GBK,否则会中文乱码 -->  
                <charset>UTF-8</charset>     
            </encoder>      
        </appender>      
        <!-- RollingFileAppender:滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件 -->  
        <!-- 以下的大概意思是:1.先按日期存日志,日期变了,将前一天的日志文件名重命名为XXX%日期%索引,新的日志仍然是demo.log -->  
        <!--             2.如果日期没有发生变化,但是当前日志的文件大小超过1KB时,对当前日志进行分割 重命名-->  
        <appender name="demolog" class="ch.qos.logback.core.rolling.RollingFileAppender">      
            <File>log/demo.log</File>      
            <!-- rollingPolicy:当发生滚动时,决定 RollingFileAppender 的行为,涉及文件移动和重命名。 -->  
            <!-- TimeBasedRollingPolicy: 最常用的滚动策略,它根据时间来制定滚动策略,既负责滚动也负责出发滚动 -->  
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">      
                <!-- 活动文件的名字会根据fileNamePattern的值,每隔一段时间改变一次 -->  
                <!-- 文件名:log/demo.2017-12-05.0.log -->  
                <fileNamePattern>log/demo.%d.%i.log</fileNamePattern>   
                <!-- 每产生一个日志文件,该日志文件的保存期限为30天 -->   
                <maxHistory>30</maxHistory>     
                <timeBasedFileNamingAndTriggeringPolicy  class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">      
                    <!-- maxFileSize:这是活动文件的大小,默认值是10MB,测试时可改成1KB看效果 -->    
                    <maxFileSize>1KB</maxFileSize>      
                </timeBasedFileNamingAndTriggeringPolicy>      
            </rollingPolicy>      
            <encoder>      
                <!-- pattern节点,用来设置日志的输入格式 -->  
                <pattern>      
                    %d %p (%file:%line)- %m%n    
                </pattern>      
                <!-- 记录日志的编码:此处设置字符集 - -->  
                <charset>UTF-8</charset>  
            </encoder>      
        </appender>      
        <!-- 控制台输出日志级别 -->  
        <root level="info">      
            <appender-ref ref="STDOUT" />      
        </root>      
        <!-- 指定项目中某个包,当有日志操作行为时的日志记录级别 -->  
        <!-- com.example.demo为根包,也就是只要是发生在这个根包下面的所有日志操作行为的权限都是DEBUG -->  
        <!-- 级别依次为【从高到低】:FATAL > ERROR > WARN > INFO > DEBUG > TRACE  -->
        <!-- <logger name="com.example.demo.controller" level="info"> -->
        <logger name="com.example.demo" level="debug">     
            <appender-ref ref="demolog" />      
        </logger>      
    </configuration>    
    logback配置文件logback.xml

    4、支持读profile

    三、部署应用

    1、jar包配置

    对于web项目,springBoot默认的打包方式配置的是jar包,他帮我们内嵌了一个tomcat,我们只需要使用我们常用的打包工具打包,通过部署jar包的方式部署到服务器上即可。

    2、war包配置

     虽然使用内置tomcat在开发上很方便,但是当我们在企业中开发的时候,有可能公司就是规定我们使用运维统一部署的tomcat服务器,那么我们就必须把项目打包成部署在tomcat中的war包,,这有有一个问题,我们的项目没有servlet容器的加载入口——web.xml文件。

      这时候,我们就需要对程序做些修改:

      1、修改pom.xml中的打包配置:<packaging>war</packaging>  

        

      2、创建一个servlet初始化入口:springBoot给我们提供了一个SpringBootServlertInitializer类。

        官方文档:https://docs.spring.io/spring-boot/docs/2.1.4.BUILD-SNAPSHOT/reference/htmlsingle/       ctrl+f 搜索:SpringBootServletInitializer

        

        我们要在我们的项目中写一个SpringBootServlertInitializer类的子类,重写他的configure()方法来完成配置,实现代码如下:

    package com.example.demo;
    
    import org.springframework.boot.builder.SpringApplicationBuilder;
    import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
    
    public class DemoServletInitializer extends SpringBootServletInitializer {
    
        @Override
        public SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
            // DemoApplication 程序入口,指定Spring的配置
            return builder.sources(DemoApplication.class);
        }
    }
    SpringBootServletInitializer子类DemoServletInitializer.java代码

      3、使用maven打包命令打包  

     这个时候打成的war包既可以部署在tomcat中,也可以使用"java -jar 项目名.war"来作为jar包部署。

      

  • 相关阅读:
    Git官方推荐用书
    二叉树-补习
    POJ 2251 Dungeon Master(三维BFS)
    Codeforces 675C Money Transfers (思维题)
    HDU 1195 Open the Lock(BFS)
    HDU 1010 Tempter of the Bone(DFS+剪枝)
    POJ 1426 Find The Multiple(DFS,BFS)
    POJ 3216 Prime Path (BFS)
    POJ 3278 Catch that cow(BFS)
    UVa 572 Oil Deposits(简单DFS)
  • 原文地址:https://www.cnblogs.com/tianhaichao/p/10402321.html
Copyright © 2011-2022 走看看