springboot+mybatis+druid整合框架实例

maven project整合springboot mybatis druid

源码地址:https://github.com/btredback/springboot-mybatis-druid

  • springboot 快速开发springmvc
  • mybatis 轻量级持久层
  • druid 阿里数据库连接池
  • 数据库当前配置为postgre数据库,可修改依赖driver及datasource配置更换数据库

pom.xml依赖相关内容

因为只做了框架demo,依赖包很少
spring-boot-starter-web -> springmvc和tomcat
spring-boot-starter-test -> 单元测试
mybatis-spring-boot-starter -> mybatis
druid -> druid
postgresql -> 数据库驱动

    <!--配置属性,版本号 -->
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <java.version>1.7</java.version>
        <druid.version>1.1.5</druid.version>
        <spring-boot.version>1.5.6.RELEASE</spring-boot.version>
    </properties>
    
    <!-- spring boot依赖 非parent调用 -->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <!-- Import dependency management from Spring Boot,not include plugin 
                    management as the parent import style -->
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <!-- spring boot -->
        <!-- https://docs.spring.io/spring-boot/docs/1.2.3.RELEASE/reference/html/using-boot-build-systems.html#using-boot-starter-poms -->
        <!-- spring boot web 包含spring mvc和tomcat-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        
        <!-- springboot 单元测试 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>
        
        <!-- springboot的mybaties -->
        <!-- https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.1</version>
        </dependency>
        
        <!-- druid -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>${druid.version}</version>
        </dependency>
        
        <!-- 数据库驱动 -->
        <!-- postgre -->
        <!-- https://mvnrepository.com/artifact/postgresql/postgresql -->
        <dependency>
            <groupId>postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <version>9.1-901-1.jdbc4</version>
        </dependency>
    </dependencies>

整合步骤

  1. 引入相关依赖,pom内容如上
  2. springboot主class声明,也就是springboot的入口application main

@ServletComponentScan 自动扫描servlet的标签,否则标签不起作用,因为druid的内部管理页面是通过servlet声明的,所以需要该标签。
修改为继承SpringBootServletInitializer并重写configure方法,该方法以便打包war时,不通过main进入而是正常web项目使用。

@SpringBootApplication
@ServletComponentScan
public class App extends SpringBootServletInitializer {
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(this.getClass());
    }

    public static void main( String[] args )
    {
        SpringApplication.run(App.class, args);
    }
}
  1. druid初始化相关配置类,配置参数写于application.properties中

为了使dataSource使用druid的,需要使用@Primary标签,该标签在注入bean时,若找到多个相同bean,则优先注入标签声明的。
druid github项目中有一个自动化配置的druid-springboot-start,如果需要可以使用这个,代替druid依赖,直接配置属性即可。
druid 自动化配置源码class地址

@Configuration
// @PropertySource("classpath:application-test.properties")
@ConfigurationProperties("spring.datasource")
public class DruidDBConfig {
    private String url;
    private String username;
    private String userpassword;
    private String driverClassName;
    private int initialSize;
    private int minIdle;
    private int maxActive;
    private int maxWait;
    private int timeBetweenEvictionRunsMillis;
    private int minEvictableIdleTimeMillis;
    private String validationQuery;
    private boolean testWhileIdle;
    private boolean testOnBorrow;
    private boolean testOnReturn;
    private boolean poolPreparedStatements;
    private int maxPoolPreparedStatementPerConnectionSize;
    private String filters;
    private String connectionProperties;

    @Bean
    // 声明其为Bean实例
    @Primary
    //如果同一个类型有多个实例,但需要注入一个的时候使用
    // 在同样的DataSource中,首先使用被标注的DataSource
    public DataSource dataSource() {
        DruidDataSource datasource = new DruidDataSource();

        datasource.setUrl(url);
        datasource.setUsername(username);
        datasource.setPassword(userpassword);
        datasource.setDriverClassName(driverClassName);

        // configuration
        datasource.setInitialSize(initialSize);
        datasource.setMinIdle(minIdle);
        datasource.setMaxActive(maxActive);
        datasource.setMaxWait(maxWait);
        datasource
                .setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
        datasource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
        datasource.setValidationQuery(validationQuery);
        datasource.setTestWhileIdle(testWhileIdle);
        datasource.setTestOnBorrow(testOnBorrow);
        datasource.setTestOnReturn(testOnReturn);
        datasource.setPoolPreparedStatements(poolPreparedStatements);
        datasource
                .setMaxPoolPreparedStatementPerConnectionSize(maxPoolPreparedStatementPerConnectionSize);
        try {
            datasource.setFilters(filters);
        } catch (SQLException e) {
            /*logger.log(Level.ERROR,
                    "druid configuration initialization filter : {0}", e);*/
            e.printStackTrace();
        }
        datasource.setConnectionProperties(connectionProperties);

        return datasource;
    }
  1. druid内部监控页面配置class

druid内部监控页面写于servlet,直接继承该servlet,然后配置相关属性。当前配置可通过 /druid/index.html访问管理页面

@WebServlet(urlPatterns={"/druid/*"},
initParams={
        @WebInitParam(name="allow",value="127.0.0.1"),// IP白名单(没有配置或者为空,则允许所有访问)
        @WebInitParam(name="deny",value="192.168.1.100"),// IP黑名单 (存在共同时,deny优先于allow)
        @WebInitParam(name="loginUsername",value="admin"),// 用户名
        @WebInitParam(name="loginPassword",value="123456"),// 密码
        @WebInitParam(name="resetEnable",value="false")// 禁用HTML页面上的“Reset All”功能
})
public class DruidStatViewServlet extends StatViewServlet {

    /**
     * 
     */
    private static final long serialVersionUID = 8782104600990278875L;

}
  1. application.properties配置druid相关属性及mybatis相关属性
    例如:
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.url=jdbc:postgresql://localhost:5432/testdb
spring.datasource.username=
spring.datasource.userpassword=
spring.datasource.driverClassName=org.postgresql.Driver

#连接池的配置信息
spring.datasource.initialSize=5
spring.datasource.minIdle=5
spring.datasource.maxActive=20
spring.datasource.maxWait=60000
spring.datasource.timeBetweenEvictionRunsMillis=60000
spring.datasource.minEvictableIdleTimeMillis=300000
spring.datasource.validationQuery=SELECT 1 FROM DUAL
spring.datasource.testWhileIdle=true
spring.datasource.testOnBorrow=false
spring.datasource.testOnReturn=false
spring.datasource.poolPreparedStatements=true
spring.datasource.maxPoolPreparedStatementPerConnectionSize=20
spring.datasource.filters=stat,wall,log4j
spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000

# MyBatis 配置
mybatis.mapper-locations=classpath*:com/project/springboot_mybatis_druid/mapper/*.xml
mybatis.type-aliases-package=com.project.springboot_mybatis_druid.model
# mybatis.mapper-locations:xml文件扫描位置 
# mybatis.type-aliases-package:Model包扫描位置 
# mybatis.config:mybatis-config.xml配置文件的路径 
# mybatis.typeHandlersPackage:扫描typeHandlers的包 
# mybatis.checkConfigLocation:检查配置文件是否存在 
# mybatis.executorType:设置执行模式(SIMPLE, REUSE, BATCH),默认为SIMPLE
  1. 编写表映射model,dao及其mybatis mapper xml,service,controller
  2. 编写单元测试
  3. 打包jar/war,pom增加build内容

jar打包完成,直接java -jar xxxx.jar即可使用
war打包完成,可放到其他容器中使用(war打包需要把packaging由jar换为war,且将spring-boot-starter-web依赖中的tomcat去除,springboot入口需要继承相关类增加相关重写方法),参考spring-boot guide html

      打包war时需要修改依赖,去除tomcat
      <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <!-- 打包war时,需要移除嵌入式tomcat插件 -->
            <!-- <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-tomcat</artifactId>
                </exclusion>
            </exclusions> -->
        </dependency>
    <!-- 构建打包maven插件 -->
    <build>
        <plugins>
            <!-- maven构建 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.1</version>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                </configuration>
            </plugin>
            
            <!-- 打包jar,只打包源码,不包含依赖jar -->
            <!-- <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                指定main入口文件
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <useUniqueVersions>false</useUniqueVersions>
                            <classpathPrefix>lib/</classpathPrefix>
                            <mainClass>com.project.springboot_mybatis_druid.App</mainClass>
                        </manifest>
                    </archive>
                </configuration>
                    </plugin> -->
                    
            <!-- 打包jar 包含源码+依赖jar-->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>1.5.8.RELEASE</version>
                <configuration>
                    <mainClass>${start-class}</mainClass>
                    <layout>ZIP</layout>
                    <!-- mvn spring-boot:run执行debug模式 -->
                    <jvmArguments>-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005</jvmArguments>       
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            
            <!-- maven打包war -->
            <!-- <plugin>
              <artifactId>maven-war-plugin</artifactId>
              <version>2.6</version>
              <configuration>
                如果想在没有web.xml文件的情况下构建WAR,请设置为false。      
                <failOnMissingWebXml>false</failOnMissingWebXml>                        
              </configuration>
            </plugin> -->
        </plugins>
    </build>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,080评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,422评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,630评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,554评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,662评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,856评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,014评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,752评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,212评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,541评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,687评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,347评论 4 331
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,973评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,777评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,006评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,406评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,576评论 2 349

推荐阅读更多精彩内容

  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,773评论 6 342
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,633评论 18 139
  • 前言 最近做回后台开发,重新抓起以前学过的SSM(Spring+Spring MVC+Mybatis),但是发现配...
    Raye阅读 6,524评论 15 79
  • 前言:学习SpringBoot不应该直接就是开始使用SpringBoot,如果直接拿来用肯定会有很多人不是很明白特...
    CoderZS阅读 74,776评论 10 217
  • 伟是我的同事,一个北方婆娘。请允许我用这样庸俗的文字,她人高马大,扎一支清清爽爽的马尾,皮肤很细腻,没有其他人脸...
    什么样的幸福阅读 239评论 1 2