nutz mysql druid_SpringBoot+Druid+Nutz+Jasypt整合配置多数据源

本文介绍了如何在SpringBoot项目中整合Druid数据源,Nutz ORM以及Jasypt加密工具,实现多数据源配置。详细讲解了配置步骤,包括引入依赖、配置application.yml、数据源配置类DataSourceConfig的编写以及Jasypt加密工具类的使用。
摘要由CSDN通过智能技术生成

一 .    引入依赖

org.springframework.boot

spring-boot-starter-web

mysql

mysql-connector-java

runtime

org.springframework.boot

spring-boot-starter-jdbc

com.alibaba

druid-spring-boot-starter

1.1.21

org.nutz

nutz

1.r.62

org.projectlombok

lombok

1.18.0

org.jasypt

jasypt

1.9.3

compile

二.    application.yml配置文件

spring:

datasource:

type: com.alibaba.druid.pool.DruidDataSource

druid:

main:

url: jdbc:mysql://127.0.0.1:3306/data_hn?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=GMT%2B8

username: root

password: +7kwXYHUt9V4btttYVr3MOr/71O/ZIL7

salt: gxmh

subo:

url: jdbc:mysql://127.0.0.1:3306/data_gs?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=GMT%2B8

username: root

password: +7kwXYHUt9V4btttYVr3MOr/71O/ZIL7

salt: gxmh

initial-size: 5 # 初始化连接大小 默认0

max-active: 20 # 最大连接数 默认8

min-idle: 5 # 最小空闲连接数 默认0

# 监控页面的用户名密码及页面地址

stat-view-servlet:

login-username: admin

login-password: 123456

enabled: true

url-pattern: /druid/*

max-wait: 60000 # 获取连接等待超时的时间(毫秒) 默认:-1

query-timeout: 90 # 查询超时时间

validation-query: SELECT 1 FROM DUAL

test-on-borrow: false # 申请连接时检测连接可用性 默认:false

test-on-return: false # 归还连接检测 默认false

test-while-idle: true # 超时是否检测连接可用性

time-between-eviction-runs-millis: 60000 # 配置空闲多久检测需要配置的空闲连接(毫秒)

min-evictable-idle-time-millis: 300000 # 配置一个连接在池中最小生存时间 默认30分钟

filters: config,stat,wall,slf4j # 通过别名的方式配置扩展插件,常用的插件有:监控统计用的filter:stat;日志用的filter:log4j;防御sql注入的filter:wall

filter:

stat:

log-slow-sql: true # 慢SQL记录

slow-sql-millis: 2000

db-type: mysql

merge-sql: false # SQL合并 默认false

wall:

config: #是否允许delete和drop表语句

delete-allow: true

drop-table-allow: false

enabled: true

db-type: mysql

pool-prepared-statements: false # 是否缓存PreparedStatement. PSCache对支持游标的数据库性能提升巨大,比如说oracle.在mysql下建议关闭.

max-pool-prepared-statement-per-connection-size: 20 # 每个连接上的PSCache的大小

use-global-data-source-stat: true # 合并多个DataSource的监控数据

server:

port: 8181

三.    数据源配置类DataSourceConfig

import com.alibaba.druid.pool.DruidDataSource;

import com.example.demo.utils.JasyptUtils;

import org.nutz.dao.Dao;

import org.nutz.dao.impl.NutDao;

import org.springframework.beans.factory.annotation.Qualifier;

import org.springframework.beans.factory.annotation.Value;

import org.springframework.boot.context.properties.bind.Binder;

import org.springframework.context.EnvironmentAware;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import org.springframework.context.annotation.Primary;

import org.springframework.core.env.Environment;

import javax.sql.DataSource;

/**

* @program: demo

* @description: 数据源配置类

* @author: guoxu

* @create: 2019-12-19 14:56

*/

/**

* 1.当存在多个数据源时,最好加上@Primary注解,这样默认使用这个连接。

* 2.使用Qualifier注解说明使用某个连接。

*/

@Configuration

public class DataSourceConfig implements EnvironmentAware {

@Value("${spring.datasource.druid.main.salt}")

private String salt;

private Environment environment;

private DataSource defaultDataSource;

@Override

public void setEnvironment(Environment environment) {

this.environment = environment;

}

//配置主数据源

@Primary

@Bean

public DataSource initDataSource(){

Binder binder = Binder.get(environment);

defaultDataSource = binder.bind("spring.datasource.druid.main", DruidDataSource.class).get();

String password = ((DruidDataSource) defaultDataSource).getPassword();

((DruidDataSource) defaultDataSource).setPassword(JasyptUtils.strEnDecrypt(password, salt, 1));

return defaultDataSource;

}

//配置从数据源

@Bean(name = "sds")

public DataSource initSDataSource(){

Binder binder = Binder.get(environment);

defaultDataSource = binder.bind("spring.datasource.druid.subo", DruidDataSource.class).get();

String password = ((DruidDataSource) defaultDataSource).getPassword();

((DruidDataSource) defaultDataSource).setPassword(JasyptUtils.strEnDecrypt(password, salt, 1));

return defaultDataSource;

}

//主数据源绑定Nutz

@Primary

@Bean

public Dao initNutzDao(DataSource dataSource){

return new NutDao(dataSource);

}

//从数据源绑定Nutz

@Bean(name = "sdao")

public Dao initSNutzDao(@Qualifier("sds") DataSource dataSource){

return new NutDao(dataSource);

}

}

四.    Nutz使用

@Autowired

Dao dao;

@Autowired

@Qualifier("sdao")

Dao sdao;

五. Jasypt加密工具类

package com.example.demo.utils;

import org.jasypt.encryption.pbe.StandardPBEStringEncryptor;

import org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig;

/**

* @program: gxww-frame-cloud

* @description: Jasypt加密解密工具类

* @author: guoxu

* @create: 2019-12-16 14:57

*/

public class JasyptUtils {

public static void main(String[] args) {

String encrypt = strEnDecrypt("7j41Gq3M!@#", "gxmh", 0);

System.out.println("encrypt:"+encrypt);

String decrypt = strEnDecrypt(encrypt, "gxmh", 1);

System.out.println("decrypt:"+decrypt);

}

/**

* @Description: 字符串加密解密

* @Param: [plainText, salt, type]

* salt 加密盐

* type 0 加密 1或其他为 解密

* @return: java.lang.String

* @Author: guoxu

* @Date: 2019/12/16

*/

public static String strEnDecrypt(String plainText, String salt,int type){

String resultStr = "";

//加密工具

StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();

//加密配置

EnvironmentStringPBEConfig config = new EnvironmentStringPBEConfig();

//加密方式,默认PBEWithMD5AndDES,可改PBEWithMD5AndTripleDES

config.setAlgorithm("PBEWithMD5AndDES");

//加密所需的salt(盐)

config.setPassword(salt);

//应用配置

encryptor.setConfig(config);

if (type == 0){

resultStr = encryptor.encrypt(plainText);

} else {

resultStr = encryptor.decrypt(plainText);

}

return resultStr;

}

}

六. 不加密数据库密码时的另一种数据源配置类

package com.example.demo.config;

import com.alibaba.druid.pool.DruidDataSource;

import org.nutz.dao.Dao;

import org.nutz.dao.impl.NutDao;

import org.springframework.beans.factory.annotation.Qualifier;

import org.springframework.boot.context.properties.ConfigurationProperties;

import org.springframework.boot.jdbc.DataSourceBuilder;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Primary;

import javax.sql.DataSource;

import java.sql.SQLException;

/**

* @program: demo

* @description: 多数据源配置类

* @author: guoxu

* @create: 2019-12-19 14:56

*/

@Configuration

public class DataSourceConfig {

/**

* 当存在多个数据源时,最好加上@Primary注解,这样默认使用这个连接。

* 不需要使用Qualifier注解说明使用某个连接。

* @return

* @throws SQLException

*/

@Primary

@Bean

@ConfigurationProperties(prefix = "spring.datasource.druid.main")

public DataSource initMainDataSource() throws SQLException {

DruidDataSource mainDataSource = DataSourceBuilder.create().type(DruidDataSource.class).build();

return mainDataSource;

}

@Bean(name = "sds")

@ConfigurationProperties(prefix = "spring.datasource.druid.subo")

public DataSource initSuboDataSource() throws SQLException {

DruidDataSource suboDataSource = DataSourceBuilder.create().type(DruidDataSource.class).build();

return suboDataSource;

}

@Primary

@Bean

public Dao initNutzDao(DataSource dataSource){

return new NutDao(dataSource);

}

@Bean(name = "sdao")

public Dao initsNutzDao(@Qualifier("sds") DataSource dataSource){

return new NutDao(dataSource);

}

}

来源:oschina

链接:https://my.oschina.net/u/4148675/blog/3145442

Nutz框架整合Spring Boot的过程中,可以按照以下步骤进行操作: 1. 首先,需要在pom.xml文件中添加Nutz和Spring Boot的相关依赖。可以通过以下代码片段添加依赖: ```xml <!-- Nutz --> <dependency> <groupId>org.nutz</groupId> <artifactId>nutz-web</artifactId> <version>1.r.71</version> </dependency> <!-- Spring Boot --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>2.5.4</version> </dependency> ``` 2. 创建一个继承自SpringBootServletInitializer的类,用于启动Spring Boot应用。可以将以下代码添加到你的项目中: ```java import org.nutz.mvc.annotation.IocBy; import org.nutz.mvc.annotation.Modules; import org.nutz.mvc.ioc.provider.ComboIocProvider; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; @Modules(scanPackage = "your.package.name") @IocBy(type = ComboIocProvider.class, args = {"*js", "ioc/", "*anno", "your.package.name", "*tx"}) public class NutzSpringBootServletInitializer extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { return builder.sources(NutzSpringBootServletInitializer.class); } } ``` 3. 创建一个Nutz配置类,用于配置Nutz的一些参数。可以按照以下代码创建一个示例的配置类: ```java import org.nutz.mvc.annotation.*; import org.nutz.mvc.ioc.provider.ComboIocProvider; @IocBy(type = ComboIocProvider.class, args = {"*js", "ioc/", "*anno", "your.package.name", "*tx"}) @Modules(scanPackage = "your.package.name") @SetupBy(NutzMainSetup.class) @ChainBy(args = "mvc/nutzmvc-chain.js") @Ok("json:full") @Fail("jsp:jsp.500") public class NutzSpringBootConfig { } ``` 4. 最后,在你的Spring Boot主类中,添加`@ImportResource`注解,引入Nutz配置文件。示例如下: ```java import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.ImportResource; @SpringBootApplication @ImportResource(locations = {"classpath:applicationContext.xml"}) public class YourSpringBootApplication { public static void main(String[] args) { SpringApplication.run(YourSpringBootApplication.class, args); } } ``` 完成以上步骤后,Nut框架就与Spring Boot成功整合了。你可以使用Nutz的注解和特性,同时也可以享受Spring Boot的便利。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值