package com.jsh.erp.config;

import com.alibaba.druid.pool.DruidDataSource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.transaction.annotation.EnableTransactionManagement;

import javax.sql.DataSource;


@Configuration
@EnableTransactionManagement(proxyTargetClass = true)
public class DbConfig {
    private static final Logger logger = LoggerFactory.getLogger(DbConfig.class);

    @Bean(name = "erpDatasource")
    @Primary
    public DataSource erpDatasource(ErpDatasourceProperties properties){
        try {
            DruidDataSource datasource = new DruidDataSource();
            datasource.setDriverClassName(properties.driverClassName);
            datasource.setUrl(properties.url);
            datasource.setUsername(properties.username);
            datasource.setPassword(properties.password);
            datasource.setInitialSize(1);
            datasource.setMinIdle(1);
            datasource.setMaxWait(60000);
            datasource.setMaxActive(5);
            datasource.setTimeBetweenEvictionRunsMillis(60000);
            datasource.setValidationQuery("select '1'");
            datasource.setTestOnBorrow(false);
            datasource.setTestOnReturn(false);
            datasource.setTestWhileIdle(true);
            datasource.setPoolPreparedStatements(true);
            datasource.setMaxOpenPreparedStatements(20);
            datasource.setMinEvictableIdleTimeMillis(300000);
            datasource.init();
            return datasource;
        }catch (Exception e){
            logger.error("服务启动失败，jsh_erp数据库Datasource初始化失败:"+e.getMessage());
            throw new IllegalArgumentException(e);
        }
    }

    @Bean
    @Primary
    public JdbcTemplate jdbcTemplate(@Qualifier("erpDatasource") DataSource dataSource) {
        return new JdbcTemplate(dataSource);
    }

    @Configuration
    @ConfigurationProperties(prefix = "erpDatasource")
    public static class ErpDatasourceProperties {
        private String driverClassName;
        private String url;
        private String username;
        private String password;

        public String getDriverClassName() {
            return driverClassName;
        }

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

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