springboot 中 druid+jpa+MYSQL数据库配置过程

Druid来自于阿里的一个开源连接池能够提供强大的监控和扩展功能,Spring Boot默认不支持Druid和jpa,需要引入依赖。

1、引入依赖包

<!--druid-->
    <!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>druid</artifactId>
      <version>1.1.22</version>
    </dependency>

<!--jpa-->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>

2、配置application.properties

#druid配置-MYSQL
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/test1?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true
spring.datasource.username=root
spring.datasource.password=123456

# 初始化大小,最小,最大
spring.datasource.initialSize=5
spring.datasource.maxActive=20
spring.datasource.minIdle=5
# 配置获取连接等待超时的时间
spring.datasource.max-wait=60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
spring.datasource.time-between-eviction-runs-millis=60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
spring.datasource.min-evictable-idle-time-millis=300000
#检测连接是否有效的sql,要求是一个查询语句,常用select 'x'.如果validationQuery为null,testOnBorrow,testOnBorrow,testOnReturn,testWhileIdle都不会起作用。这个可以不配置
spring.datasource.validation-query=SELECT 'x'
#检测连接是否有效的超时时间。
spring.datasource.validation-query-timeout=60000
spring.datasource.test-while-idle=true
spring.datasource.test-on-borrow=false
spring.datasource.test-on-return=false
# 打开PSCache,并且指定每个连接上PSCache的大小
spring.datasource.pool-prepared-statements=true
spring.datasource.max-pool-prepared-statement-per-connection-size=20
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙,#别名方式,扩展插件,监控统计用的filter:stat,日志用的filter:log4j,防御sql注入的filter:wall
spring.datasource.filters=stat,wall,slf4j

3、Druid配置信息定制

@Configuration
public class DruidConfig {
    @Autowired
    private DruidDataSourceProperties properties;

    @Bean(name = "druidDataSource", initMethod = "init", destroyMethod = "close")
    @Qualifier("druidDataSource")
    public DataSource dataSource() throws Exception {
        DruidDataSource druidDataSource = new DruidDataSource();
        druidDataSource.setUrl(properties.getUrl());
        druidDataSource.setUsername(properties.getUsername());
        druidDataSource.setPassword(properties.getPassword());
        druidDataSource.setDriverClassName(properties.getDriverClassName());
        druidDataSource.setInitialSize(properties.getInitialSize());
        druidDataSource.setMaxActive(properties.getMaxActive());
        druidDataSource.setMinIdle(properties.getMinIdle());
        druidDataSource.setMaxWait(properties.getMaxWait());
        druidDataSource.setTimeBetweenEvictionRunsMillis(properties
                .getTimeBetweenEvictionRunsMillis());
        druidDataSource.setMinEvictableIdleTimeMillis(properties
                .getMinEvictableIdleTimeMillis());
        druidDataSource.setValidationQuery(properties.getValidationQuery());
        druidDataSource.setTestWhileIdle(properties.isTestWhileIdle());
        druidDataSource.setTestOnBorrow(properties.isTestOnBorrow());
        druidDataSource.setTestOnReturn(properties.isTestOnReturn());
        druidDataSource.setPoolPreparedStatements(properties
                .isPoolPreparedStatements());
        druidDataSource.setMaxPoolPreparedStatementPerConnectionSize(properties
                .getMaxPoolPreparedStatementPerConnectionSize());
        druidDataSource.setFilters(properties.getFilters());

        try {
            if (null != druidDataSource) {
                druidDataSource.setFilters("wall,stat");
                druidDataSource.setUseGlobalDataSourceStat(true);
//                Properties properties = new Properties();
//                properties.setProperty("decrypt", "true");
//                druidDataSource.setConnectProperties(properties);
                druidDataSource.init();
            }
        } catch (Exception e) {
            throw new RuntimeException(
                    "load datasource error, dbProperties is :", e);
        }
        return druidDataSource;
    }
}

3、获取Properties中配置信息

@Configuration
@ConfigurationProperties(prefix = "spring.datasource")
public class DruidDataSourceProperties {

	private String url;

	private String username;

	private String password;

	private String driverClassName;

	private int initialSize;

	private int maxActive;

	private int minIdle;

	private int maxWait;

	private long timeBetweenEvictionRunsMillis;

	private long minEvictableIdleTimeMillis;

	private String validationQuery;

	private boolean testWhileIdle;

	private boolean testOnBorrow;

	private boolean testOnReturn;

	private boolean poolPreparedStatements;

	private int maxPoolPreparedStatementPerConnectionSize;

	private String filters;

	public String getUrl() {
		return url;
	}

	public void setUrl(String url) {
		this.url = url;
	}

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public String getDriverClassName() {
		return driverClassName;
	}

	public void setDriverClassName(String driverClassName) {
		this.driverClassName = driverClassName;
	}

	public int getInitialSize() {
		return initialSize;
	}

	public void setInitialSize(int initialSize) {
		this.initialSize = initialSize;
	}

	public int getMaxActive() {
		return maxActive;
	}

	public void setMaxActive(int maxActive) {
		this.maxActive = maxActive;
	}

	public int getMinIdle() {
		return minIdle;
	}

	public void setMinIdle(int minIdle) {
		this.minIdle = minIdle;
	}

	public int getMaxWait() {
		return maxWait;
	}

	public void setMaxWait(int maxWait) {
		this.maxWait = maxWait;
	}

	public long getTimeBetweenEvictionRunsMillis() {
		return timeBetweenEvictionRunsMillis;
	}

	public void setTimeBetweenEvictionRunsMillis(long timeBetweenEvictionRunsMillis) {
		this.timeBetweenEvictionRunsMillis = timeBetweenEvictionRunsMillis;
	}

	public long getMinEvictableIdleTimeMillis() {
		return minEvictableIdleTimeMillis;
	}

	public void setMinEvictableIdleTimeMillis(long minEvictableIdleTimeMillis) {
		this.minEvictableIdleTimeMillis = minEvictableIdleTimeMillis;
	}

	public String getValidationQuery() {
		return validationQuery;
	}

	public void setValidationQuery(String validationQuery) {
		this.validationQuery = validationQuery;
	}

	public boolean isTestWhileIdle() {
		return testWhileIdle;
	}

	public void setTestWhileIdle(boolean testWhileIdle) {
		this.testWhileIdle = testWhileIdle;
	}

	public boolean isTestOnBorrow() {
		return testOnBorrow;
	}

	public void setTestOnBorrow(boolean testOnBorrow) {
		this.testOnBorrow = testOnBorrow;
	}

	public boolean isTestOnReturn() {
		return testOnReturn;
	}

	public void setTestOnReturn(boolean testOnReturn) {
		this.testOnReturn = testOnReturn;
	}

	public boolean isPoolPreparedStatements() {
		return poolPreparedStatements;
	}

	public void setPoolPreparedStatements(boolean poolPreparedStatements) {
		this.poolPreparedStatements = poolPreparedStatements;
	}

	public int getMaxPoolPreparedStatementPerConnectionSize() {
		return maxPoolPreparedStatementPerConnectionSize;
	}

	public void setMaxPoolPreparedStatementPerConnectionSize(
			int maxPoolPreparedStatementPerConnectionSize) {
		this.maxPoolPreparedStatementPerConnectionSize = maxPoolPreparedStatementPerConnectionSize;
	}

	public String getFilters() {
		return filters;
	}

	public void setFilters(String filters) {
		this.filters = filters;
	}

	public DruidDataSourceProperties() {
		// TODO Auto-generated constructor stub
	}

	public DruidDataSourceProperties(String url, String username,
									 String password, String driverClassName, int initialSize,
									 int maxActive, int minIdle, int maxWait,
									 long timeBetweenEvictionRunsMillis,
									 long minEvictableIdleTimeMillis, String validationQuery,
									 boolean testWhileIdle, boolean testOnBorrow, boolean testOnReturn,
									 boolean poolPreparedStatements,
									 int maxPoolPreparedStatementPerConnectionSize, String filters) {
		this.url = url;
		this.username = username;
		this.password = password;
		this.driverClassName = driverClassName;
		this.initialSize = initialSize;
		this.maxActive = maxActive;
		this.minIdle = minIdle;
		this.maxWait = maxWait;
		this.timeBetweenEvictionRunsMillis = timeBetweenEvictionRunsMillis;
		this.minEvictableIdleTimeMillis = minEvictableIdleTimeMillis;
		this.validationQuery = validationQuery;
		this.testWhileIdle = testWhileIdle;
		this.testOnBorrow = testOnBorrow;
		this.testOnReturn = testOnReturn;
		this.poolPreparedStatements = poolPreparedStatements;
		this.maxPoolPreparedStatementPerConnectionSize = maxPoolPreparedStatementPerConnectionSize;
		this.filters = filters;
	}

}

如果需要Druid的监控统计功能在配置代码中加入以下代码:

@Bean
	public ServletRegistrationBean druidServlet() {
		ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");
		// IP白名单 (没有配置或者为空,则允许所有访问)
		servletRegistrationBean.addInitParameter("allow", "127.0.0.1");
		// IP黑名单(共同存在时,deny优先于allow)
		//servletRegistrationBean.addInitParameter("deny", "");
		//控制台管理用户
		servletRegistrationBean.addInitParameter("loginUsername", "admin");
		servletRegistrationBean.addInitParameter("loginPassword", "admin");
		//是否能够重置数据 禁用HTML页面上的“Reset All”功能
		servletRegistrationBean.addInitParameter("resetEnable", "false");
		return servletRegistrationBean;
	}

	@Bean
	public FilterRegistrationBean filterRegistrationBean() {
		FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
		filterRegistrationBean.addUrlPatterns("/*");
		filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
		return filterRegistrationBean;
	}

访问地址:http://127.0.0.1:8080/druid, 使用配置的账号密码登录即可查看数据源及SQL统计等监控信息。

4、jpa配置

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(entityManagerFactoryRef = "entityManagerFactory",
        transactionManagerRef = "transactionManager",
        basePackages = {"*.dao"})//指定需要扫描的dao所在包
public class RepositoryConfig {

    @Autowired
    private JpaProperties jpaProperties;

    @Autowired
    @Qualifier("druidDataSource")
    private DataSource druidDataSource;

    @Bean(name = "entityManager")
    @Primary
    public EntityManager entityManager(EntityManagerFactoryBuilder builder) {
        return entityManagerFactory(builder).getObject().createEntityManager();
    }

    /**
     * 指定需要扫描的实体包实现与数据库关联
     * @param builder
     * @return
     */
    @Bean(name = "entityManagerFactory")
    @Primary
    public LocalContainerEntityManagerFactoryBean entityManagerFactory(EntityManagerFactoryBuilder builder) {
        return builder
                .dataSource(druidDataSource)
                .properties(getVendorProperties(druidDataSource))
                .packages("*.entity")//指定需要扫描的entity所在包
                .build();
    }

    /**
     * 通过jpaProperties指定hibernate数据库方言以及在控制台打印sql语句
     * @param dataSource
     * @return
     */
    private Map<String, String> getVendorProperties(DataSource dataSource) {
        Map<String, String> map = jpaProperties.getProperties();
        map.put("hibernate.dialect", "org.hibernate.dialect.MySQL8Dialect");
        map.put("hibernate.show_sql", "true");
        return map;
    }

    /**
     * 创建事务管理
     * @param builder
     * @return
     */
    @Bean(name = "transactionManager")
    @Primary
    PlatformTransactionManager transactionManager(EntityManagerFactoryBuilder builder) {
        return new JpaTransactionManager(entityManagerFactory(builder).getObject());
    }

}

到此这篇关于springboot 中 druid+jpa+MYSQL数据库配置的文章就介绍到这了,更多相关springboot druid+jpa+MYSQL配置内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • SpringBoot JPA懒加载失效的解决方案(亲测有效)

    SpringBoot JPA懒加载失效 使用springBoot JPA 对两个实体类进行双向关联,并设置了懒加载,如下: 然后在查询后用到了roles,会报错, 解决办法如下: 1. 在配置文件中加入: spring.jpa.properties.hibernate.enable_lazy_load_no_trans =true 2. 如果你是在SpringBoot的测试类 中使用报错,则在方法上加入@Transactional注解 在百度查询时发现有人说 修改该配置: spring.jpa.

  • Springboot使用Spring Data JPA实现数据库操作

    SpringBoot整合JPA 使用数据库是开发基本应用的基础,借助于开发框架,我们已经不用编写原始的访问数据库的代码,也不用调用JDBC(Java Data Base Connectivity)或者连接池等诸如此类的被称作底层的代码,我们将从更高的层次上访问数据库,这在Springboot中更是如此,本章我们将详细介绍在Springboot中使用 Spring Data JPA 来实现对数据库的操作. JPA & Spring Data JPA JPA是Java Persistence API

  • jpa介绍以及在spring boot中使用详解

    目录 1.什么是jpa呢? 2.jpa具有什么优势? 2.1标准化 2.2容器级特性的支持 2.3简单方便 2.4查询能力 2.5高级特性 3.基于注解的使用 3.1 JPA拥有哪些注解呢? 4.代码实战 4.1maven依赖 4.2配置文件 4.3创建实体以及数据访问接口 总结 1.什么是jpa呢? JPA顾名思义就是Java Persistence API的意思,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中. 2.jpa具有什么优势? 2.1标

  • springboot jpa 延迟加载问题的2种解决

    springboot jpa 延迟加载问题 在springboot中,在application.properties的配置文件中新增spring.jpa.open-in-view=true方法失效 经过测试,有两种解决办法: 1.在application.properties的配置文件中新增 spring.jpa.properties.hibernate.enable_lazy_load_no_trans=true: 2.在测试的方法上添加@Transactional注解. 关于springbo

  • SpringBoot整合SpringDataJPA

    目录 SpringBoot整合JPA JPA & Spring Data JPA Hibernate & JPA 1.JPA 2.JPA & Hibernate 关系 Hibernate VS Mybatis 一.导入依赖 二.简单的CRUD 1.配置文件 2.实体类 3.Dao层 4.service层 5.controller 三.自定义SQL 四.分页查询 五.连表查询 六.分组查询 七.与mybatis对比 总结 SpringBoot整合JPA 使用数据库是开发基本应用的基础

  • springboot 中 druid+jpa+MYSQL数据库配置过程

    Druid来自于阿里的一个开源连接池能够提供强大的监控和扩展功能,Spring Boot默认不支持Druid和jpa,需要引入依赖. 1.引入依赖包 <!--druid--> <!-- https://mvnrepository.com/artifact/com.alibaba/druid --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</art

  • Springboot上传excel并将表格数据导入或更新mySql数据库的过程

    本文主要描述,Springboot-mybatis框架下上传excel,并将之导入mysql数据库的过程,如果用户id已存在,则进行更新修改数据库中该项信息,由于用到的是前后端分离技术,这里记录的主要是后端java部分,通过与前端接口进行对接实现功能,使用layui等前端框架与之对接,也可以自己写前端代码,本文以Controller开始,从导入过程开始讲述,其中包括字典表的转换 1.在pom.xml文件中导入注解,主要利用POI <dependency> <groupId>org.

  • Linux下PHP+MYSQL+APACHE配置过程 (摘)第1/2页

    需要软件如下:  apache: http://www.apache.org  mysql: http://www.mysql.com  php: http://www.php.net/downloads.php  gd: http://www.boutell.com/gd/#buildgd  ZendOptimizer http://www.zend.org/products/zend_optimizer  Gettext http://ftp.gnu.org/pub/gnu/gettext/

  • mysql主从复制配置过程

    主库配置 1. 配置mysql vim /etc/my.cn # 在文件中增加以下内容 server-id=1 # 保证server id唯一 log-bin = /var/lib/mysql/mysql-bin.log binlog-do-db = db1 binlog-do-db = db2 其中db1和db2是计划进行主从复制的库,如果有多个,写多行即可.配置完毕后,重启数据库: service mysqld restart 2. 添加复制用户 通过phpmyadmin,添加新用户,并授予

  • Eclipse中C++连接mysql数据库

    本文为大家分享了Eclipse中C++连接mysql数据库的具体代码,供大家参考,具体内容如下 MinGW的配置在C连mysql里已经提到,这里只说C++跟C配置不同的地方. 首先觉得C++比C方便多了,不用生成.a连接文件,直接使用.lib文件即可 导入.h文件所在目录到C++ Compiler中的includes 添加lib文件搜索 代码: #include <winsock.h> #include <iostream> #include <string> #inc

  • SpringBoot项目application.yml文件数据库配置密码加密的方法

    在Spring boot开发中,需要在application.yml文件里配置数据库的连接信息,或者在启动时传入数据库密码,如果不加密,传明文,数据库就直接暴露了,相当于"裸奔"了,因此需要进行加密处理才行. 使用@SpringBootApplication注解启动的项目,只需增加maven依赖 我们对信息加解密是使用这个jar包的: 编写加解密测试类: package cn.linjk.ehome; import org.jasypt.encryption.pbe.StandardP

  • Java基础MAC系统下IDEA连接MYSQL数据库JDBC过程

    JDBC数据库连接 MySQL中建表 在终端使用命令mysql -u root -p打开数据库,在数据库操作环境下进行创建数据库,建表等等操作 建立数据库语句 create dababase 数据库名 建表语句 create table bookinfo( -> book_id int primary key auto_increment, -> book_name varchar(20) not null, -> price float(6,2) not null, -> pub

  • Jaspersoft Studio添加mysql数据库配置步骤

    目录 1.创建数据配置 2.添加字段 Jaspersoft Studio添加数据库配置可以解决报表字段较多,手动添加效率低的问题.添加数据库配置,笔者这里以 mysql 为例,步骤如下 1.创建数据配置 在Data Adapters上右键,Create Data Adapter 选择数据库 jdbc 连接 填写数据库连接相关信息 点击下方的Driver Classpath,添加 mysql的驱动 jar包 笔者这里添加的 jar包在 maven本地仓库中,读者可根据自己的情况选择 打开 添加完成

  • MySQL数据库配置信息查看与修改方法详解

    目录 摘要 查看 查看数据基本信息 查询sql_mode 查看在配置文件中定义的变量 查看MySQL的服务当前运行时的变量 查看MySQL默认认证方式 修改MySQL的系统变量 根据变量修改的方式 根据变量的生效范围 总结 摘要 当在不同团队间使用MySQL数据库时,最好是保证数据库的配置信息是一致的,否则会因为不同开发同事的SQL规范不一样,导致出现一些不必要的SQL问题: 本篇博客,主要记录如何查看数据的配置信息,及相关解释. 查看 查看数据基本信息 查看版本 查看版本 select ver

  • Centos系统中彻底删除Mysql数据库步骤

    详细步骤如下所示: 1.输入命令查询系统中已安装的mysql. rpm -qa |grep -i mysql 2.逐个卸载mysql. yum remove 系统显示已安装的mysql 比如: yum remove mysql-community-server-5.7.19-1.el7.x86_64 3.卸载完成后使用find命令来查找系统中存在的mysql文件夹. find / -name mysql 4.使用rm -rf命令逐个删除文件夹路径即可. 比如: rm -rf /etc/logro

随机推荐