Spring Boot 2.0前后端知识交流分享

Spring Boot知识整理(二)

2018-08-02  本文已影响130人  AaronSimon

一、Spring Boot 依赖管理

  通过InteIIij IDEA创建Spring Boot项目,会发现在项目的pom文件中会有如下代码:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.2.RELEASE</version>
</parent>

这个是Spring Boot的父类模块,继承这个父类模块,然后就可以引入Spring Boot提供的相关依赖了(无需指定版本号)。但是在我们的项目中,通常会有自己的父类模块,不能以继承的方式再继承Spring Boot模块,因为Maven不支持多继承。其实我们可以使用import scope依赖能解决这个问题。我们可以在单独的pom中使用dependencyManagement管理与项目相关的所有依赖,其它模块使用import scope引入dependencyManagement。

<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>

        <groupId>com.southgis.ibase</groupId>
        <artifactId>parent</artifactId>
        <packaging>pom</packaging>
        <version>2.0.1-SNAPSHOT</version>
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>junit</groupId>
                    <artifactid>junit</artifactId>
                    <version>4.6.5</version>
                </dependency>
        </dependencyManagement>  
</project>         
<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>

        <groupId>com.southgis.ibase</groupId>
        <artifactId>codedict</artifactId>
        <packaging>pom</packaging>
        <version>2.0.1-SNAPSHOT</version>

        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>com.southgis.ibase</groupId>
                    <artifactid>parent</artifactId>
                    <version>2.0.1-SNAPSHOT</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
            </dependencies>
        </dependencyManagement>
        <dependencies>
          <dependency>
            <groupId>junit</groupId>
            <artifactid>junit</artifactId>
          </dependency>
        <dependencies>
</project>         

这样就可以解决我们项目中不继承Spring Boot的父类模块,我们只需要在项目的父类工程中添加

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>2.0.2.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

,子类模块就可以直接引入Spring Boot提供的依赖包了。

二、Spring Boot多模块注入bean

  目前在我们项目微服务化的过程中遇到这样的问题:组织项服务(organ)依赖缓冲模块(cache),但是在引入缓冲模块的依赖之后,系统是无法找到相关的bean的。在SpringMVC框架下,我们需要配置相关的扫描目录,那在Spring Boot下该如何配置呢?

  其实,Spring Boot启动类启动时,默认扫描其所在目录及其子目录(启动类最好放在根目录)。因为缓冲目录不在扫描范围,所以程序无法注入相关的bean。那么,我们需要配置相关的扫描目录(Spring Boot可以将扫描目录配置在启动类上,很方便)。

/**
 * 组织项微服务部署启动类
 *
 * @author simon
 **/
@EnableDiscoveryClient
//开启事物
@EnableTransactionManagement
@EnableEurekaClient
@EnableFeignClients
@ComponentScan(basePackages = {"com.southgis.ibase.organization","com.southgis.ibase.cache"})
@SpringBootApplication
public class OrganMicroApplication {
  public static void main(String[] args) {
    SpringApplication.run(OrganMicroApplication.class, args);
  }
}

  如果按照以上方式仍然出现无法找到bean的问题,请注意上面的一句话启动类最好放在根目录,按照上面的例子,应该把启动类放在com.southgis.ibase根目录下。

三、Spring Boot数据库连接池

  目前Spring Boot2.0支持的连接池包括dbcp,dbcp2,tomcat,HikariCP。在默认情况下,数据库连接可以使用DataSource池进行自动配置。

3.1 使用HikariCP数据源连接池

  HiKariCP是数据库连接池的一个后起之秀,号称性能最好,可以完美地PK掉其他连接池,是一个高性能的JDBC连接池,基于BoneCP做了不少的改进和优化。其作者还有另外一个开源作品——高性能的JSON解析器HikariJSON。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!--或者添加jdbc-->
<!-- <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency> -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.29</version>
</dependency>

3.2 使用Tomcat数据源连接池

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!--或者添加jdbc-->
<!-- <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency> -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.29</version>
</dependency>

3.3 使用DBCP2数据源连接池

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!--或者添加jdbc-->
<!-- <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency> -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.29</version>
</dependency>
<dependency>
  <groupId>org.apache.commons</groupId>
  <artifactId>commons-dbcp2</artifactId>
  <version>2.1.1</version>
</dependency>

3.4 使用Druid数据源连接池

  除了上面这些内置的数据库连接池,我们还可以配置Druid数据源连接池,Druid数据库连接池由阿里巴巴开源,号称是java语言中最好的数据库连接池,是为监控而生的。Druid的官方地址是:https://github.com/alibaba/druid ,Druid优点如下:

  1. 可以监控数据库访问性能,Druid内置提供了一个功能强大的StatFilter插件,能够详细统计SQL的执行性能,这对于线上分析数据库访问性能有帮助。
  2. 替换DBCP和C3P0。Druid提供了一个高效、功能强大、可扩展性好的数据库连接池。
  3. 数据库密码加密。直接把数据库密码写在配置文件中,这是不好的行为,容易导致安全问题。DruidDruiver和DruidDataSource都支持PasswordCallback。
  4. SQL执行日志,Druid提供了不同的LogFilter,能够支持Common-Logging、Log4j和JdkLog,你可以按需要选择相应的LogFilter,监控你应用的数据库访问情况。
  5. 扩展JDBC,如果你要对JDBC层有编程的需求,可以通过Druid提供的Filter-Chain机制,很方便编写JDBC层的扩展插件
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!--或者添加jdbc-->
<!-- <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency> -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.29</version>
</dependency>
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.1.4</version>
</dependency>
上一篇 下一篇

猜你喜欢

热点阅读