zoukankan      html  css  js  c++  java
  • 创建数据源、连接数据库

    以下是配置数据源的操作:

    @Configuration
    @EnableConfigurationProperties(ShardingDataSourceConfig.class)
    public class DataSourceConfig {
        private static final Logger logger = LoggerFactory.getLogger(DataSourceConfig.class);
    
        @Resource
        OracleConfig oracleConfig;
        @Resource
        private ShardingDataSourceConfig shardingDataSourceConfig;
    
        @Bean(name = "secondaryDataSource")
        @Qualifier("secondaryDataSource")
        public DataSource secondaryDataSource() throws Exception{
            //return DataSourceBuilder.create().build();
    
            ShardingDruidDataSource datasource = new ShardingDruidDataSource();
            logger.debug("decrypt = {}", shardingDataSourceConfig.isDecrypt());
            logger.debug("decryptKey = {}", shardingDataSourceConfig.getDecryptKey());
            logger.debug("encryptedPassword = {}", datasource.getEncryptedPassword());
            datasource.setUrl(oracleConfig.dbUrl);
            datasource.setUsername(oracleConfig.username);
            //datasource.setPassword(oracleConfig.password);
            datasource.setEncryptedPassword(oracleConfig.encryptedPassword);
            datasource.setDriverClassName(oracleConfig.driverClassName);
            //configuration
            datasource.setInitialSize(oracleConfig.initialSize);
            datasource.setMinIdle(oracleConfig.minIdle);
            datasource.setMaxActive(oracleConfig.maxActive);
            datasource.setMaxWait(oracleConfig.maxWait);
            datasource.setTimeBetweenEvictionRunsMillis(oracleConfig.timeBetweenEvictionRunsMillis);
            datasource.setMinEvictableIdleTimeMillis(oracleConfig.minEvictableIdleTimeMillis);
            datasource.setValidationQuery(oracleConfig.validationQuery);
            datasource.setTestWhileIdle(oracleConfig.testWhileIdle);
            datasource.setTestOnBorrow(oracleConfig.testOnBorrow);
            datasource.setTestOnReturn(oracleConfig.testOnReturn);
            datasource.setPoolPreparedStatements(oracleConfig.poolPreparedStatements);
            datasource.setMaxPoolPreparedStatementPerConnectionSize(oracleConfig.maxPoolPreparedStatementPerConnectionSize);
            if (shardingDataSourceConfig.isDecrypt() && !Strings.isEmpty(datasource.getEncryptedPassword()) && !Strings.isEmpty(shardingDataSourceConfig.getDecryptKey())) {
                String decryptedPassword = ConfigTools.decrypt(shardingDataSourceConfig.getDecryptKey(), datasource.getEncryptedPassword());
                datasource.setPassword(decryptedPassword);
            }
            try {
                datasource.setFilters(oracleConfig.filters);
            } catch (Exception e) {
                logger.error("druid configuration initialization filter", e);
            }
            datasource.setConnectionProperties(oracleConfig.connectionProperties);
    
            return datasource;
        }
    
        @Bean(name = "secondaryJdbcTemplate")
        public JdbcTemplate secondaryJdbcTemplate(@Qualifier("secondaryDataSource") DataSource dataSource) {
            return new JdbcTemplate(dataSource);
        }
    
    }

    数据分片,加解密操作公钥和私钥分开:

    @ConfigurationProperties(prefix="shardingdatasource")
    public class ShardingDataSourceConfig {
        /**
         * 密码加密:私钥
         * 
         */
        private static String Pri = "";
        /**
         * 密码加密:公钥
         * 
         */
        private static String Pub = "";
    
        private boolean decrypt = true;
        
        private String decryptKey = Pub;
        
        public boolean isDecrypt() {
            return decrypt;
        }
    
        public void setDecrypt(boolean decrypt) {
            this.decrypt = decrypt;
        }
    
        public String getDecryptKey() {
            return decryptKey;
        }
    
        public void setDecryptKey(String decryptKey) {
            this.decryptKey = decryptKey;
        }
        
        
        
        public static void main(String[] args) throws Exception {
            String encrypted = ConfigTools.encrypt(Pri, "sad");
            System.out.println(encrypted);
            String decrypted = ConfigTools.decrypt(Pub, encrypted);
            System.out.println(decrypted);
        }
    
    }

    连接数据源的配置:

    @Configuration
    public class OracleConfig {
    
    
            private static final Logger logger = LoggerFactory.getLogger(OracleConfig.class);
    
            //@Autowired
            //private AppConfig appConfig;
    
            @Value("${spring.datasource.druid.url}")
            public String dbUrl;
    
            @Value("${spring.datasource.druid.username}")
            public String username;
    
            //@Value("${spring.datasource.druid.password}")
            //public String password;
    
            @Value("${spring.datasource.druid.encryptedPassword}")
            public String encryptedPassword;
    
            @Value("${spring.datasource.druid.driver-class-name}")
            public String driverClassName;
    
            @Value("${spring.datasource.druid.initial-size}")
            public int initialSize;
    
            @Value("${spring.datasource.druid.min-idle}")
            public int minIdle;
    
            @Value("${spring.datasource.druid.max-active}")
            public int maxActive;
    
            @Value("${spring.datasource.druid.max-wait}")
            public int maxWait;
    
            @Value("${spring.datasource.druid.time-between-eviction-runs-millis}")
            public int timeBetweenEvictionRunsMillis;
    
            @Value("${spring.datasource.druid.min-evictable-idle-time-millis}")
            public int minEvictableIdleTimeMillis;
    
            @Value("${spring.datasource.druid.validation-query}")
            public String validationQuery;
    
            @Value("${spring.datasource.druid.test-while-idle}")
            public boolean testWhileIdle;
    
            @Value("${spring.datasource.druid.test-on-borrow}")
            public boolean testOnBorrow;
    
            @Value("${spring.datasource.druid.test-on-return}")
            public boolean testOnReturn;
    
            @Value("${spring.datasource.druid.pool-prepared-statements}")
            public boolean poolPreparedStatements;
    
            @Value("${spring.datasource.druid.max-pool-prepared-statement-per-connection-size}")
            public int maxPoolPreparedStatementPerConnectionSize;
    
            @Value("${spring.datasource.druid.filters}")
            public String filters;
    
            @Value("{spring.datasource.druid.connection-properties}")
            public String connectionProperties;
    }

    配置文件如下:

    datasource:
        druid:
          url: jdbc:oracle:thin:@XXXXX:XX:XXXX
          username:XXXXX
          #password:XXXXX
          encryptedPassword: XXXXXXX
          driver-class-name: oracle.jdbc.OracleDriver
          # 连接池配置
          initial-size: 1
          max-active: 20
          min-idle: 1
          max-wait: 10000
          pool-prepared-statements: true
          max-open-prepared-statements: 20
          validation-query: SELECT 1 FROM DUAL
          validation-query-timeout: 5000
          test-on-borrow: false
          test-on-return: false
          test-while-idle: true
          time-between-eviction-runs-millis: 60000
          min-evictable-idle-time-millis: 30000
          max-evictable-idle-time-millis: 60000
          removeAbandoned: true
          removeAbandonedTimeout: 1800
          connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
          max-pool-prepared-statement-per-connection-size: 20
          filters: stat,wall #filters: #配置多个英文逗号分隔(统计,sql注入,log4j过滤)
        type: com.alibaba.druid.pool.DruidDataSource

    这样配置就差不多ok了。只要再代码中使用jdbcTemplet执行sql就能成功读取数据

  • 相关阅读:
    css盒子模型 ( 基本针对兼容性问题有点帮助 )
    11.5 Array 数组
    11.5笔记 数组去重
    11.5笔记 函数
    11..2笔记 对象
    11.1笔记
    10.31笔记
    10.31笔记 作用域链
    10.15笔记 js
    10.8补
  • 原文地址:https://www.cnblogs.com/otways/p/11156190.html
Copyright © 2011-2022 走看看