• SpringBoot+SpringCloud+vue+Element开发项目——集成Druid数据源


    添加依赖

    pom.xml

    <!--druid-->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid-spring-boot-starter</artifactId>
        <version>1.1.10</version>
    </dependency>

    添加配置文件

    application.yml

    server:
      port: 8001
    spring:
      datasource:
        name: druidDataSource
        type: com.alibaba.druid.pool.DruidDataSource
        druid:
          driver-class-name: com.mysql.jdbc.Driver
          url: jdbc:mysql://localhost:3306/mdh?useUnicode=true&zeroDateTimeBehavior=convertToNull&autoReconnect=true&characterEncoding=utf-8
          username: root
          password: root
          filters: stat,wall,log4j,config
          max-active: 100
          initial-size: 1
          max-wait: 60000
          min-idle: 1
          time-between-eviction-runs-millis: 60000
          min-evictable-idle-time-millis: 300000
          validation-query: select 'x'
          test-while-idle: true
          test-on-borrow: false
          test-on-return: false
          pool-prepared-statements: true
          max-open-prepared-statements: 50
          max-pool-prepared-statement-per-connection-size: 20

    自定义属性配置,添加配置类

    DruidDataSourceProperties.java

    /**
     * 数据源属性
     */
    @ConfigurationProperties(prefix = "spring.datasource.druid")
    public class DruidDataSourceProperties {
     
       // jdbc
       private String driverClassName;
       private String url;
       private String username;
       private String password;
       // jdbc connection pool
       private int initialSize;
       private int minIdle;
       private int maxActive = 100;
       private long 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;
       // filter
       private String filters;
     
       public int getInitialSize() {
          return initialSize;
       }
     
       public void setInitialSize(int initialSize) {
          this.initialSize = initialSize;
       }
     
       public int getMinIdle() {
          return minIdle;
       }
     
       public void setMinIdle(int minIdle) {
          this.minIdle = minIdle;
       }
     
       public int getMaxActive() {
          return maxActive;
       }
     
       public void setMaxActive(int maxActive) {
          this.maxActive = maxActive;
       }
     
       public long getMaxWait() {
          return maxWait;
       }
     
       public void setMaxWait(long 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 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;
       }

    在config包下创建DruidConfig配置类

    DruidConfig.java

    /**
     * Druid数据源配置
     */
    @Configuration
    @EnableConfigurationProperties({DruidDataSourceProperties.class})
    public class DruidConfig {
        @Autowired
        private DruidDataSourceProperties properties;
     
        @Bean
        @ConditionalOnMissingBean
        public DataSource druidDataSource() {
            DruidDataSource druidDataSource = new DruidDataSource();
            druidDataSource.setDriverClassName(properties.getDriverClassName());
            druidDataSource.setUrl(properties.getUrl());
            druidDataSource.setUsername(properties.getUsername());
            druidDataSource.setPassword(properties.getPassword());
            druidDataSource.setInitialSize(properties.getInitialSize());
            druidDataSource.setMinIdle(properties.getMinIdle());
            druidDataSource.setMaxActive(properties.getMaxActive());
            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());
     
            try {
                druidDataSource.setFilters(properties.getFilters());
                druidDataSource.init();
            } catch (SQLException e) {
                e.printStackTrace();
            }
     
            return druidDataSource;
        }
     
        /**
         * 注册Servlet信息, 配置监控视图
         *
         * @return
         */
        @Bean
        @ConditionalOnMissingBean
        public ServletRegistrationBean<Servlet> druidServlet() {
            ServletRegistrationBean<Servlet> servletRegistrationBean = new ServletRegistrationBean<Servlet>(new StatViewServlet(), "/druid/*");
     
            //白名单:
    //        servletRegistrationBean.addInitParameter("allow","127.0.0.1,139.196.87.48");
            //IP黑名单 (存在共同时,deny优先于allow) : 如果满足deny的话提示:Sorry, you are not permitted to view this page.
            servletRegistrationBean.addInitParameter("deny","192.168.1.119");
            //登录查看信息的账号密码, 用于登录Druid监控后台
            servletRegistrationBean.addInitParameter("loginUsername", "admin");
            servletRegistrationBean.addInitParameter("loginPassword", "admin");
            //是否能够重置数据.
            servletRegistrationBean.addInitParameter("resetEnable", "true");
            return servletRegistrationBean;
     
        }
     
        /**
         * 注册Filter信息, 监控拦截器
         *
         * @return
         */
        @Bean
        @ConditionalOnMissingBean
        public FilterRegistrationBean<Filter> filterRegistrationBean() {
            FilterRegistrationBean<Filter> filterRegistrationBean = new FilterRegistrationBean<Filter>();
            filterRegistrationBean.setFilter(new WebStatFilter());
            filterRegistrationBean.addUrlPatterns("/*");
            filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
            return filterRegistrationBean;
        }
    }

    添加log4j依赖

    pom.xml

    <!--log4j-->
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>

    添加log4j配置

    log4j.properties

    ### set log levels ###    
    log4j.rootLogger = INFO,DEBUG, console, infoFile, errorFile ,debugfile,mail 
    LocationInfo=true    
     
    log4j.appender.console = org.apache.log4j.ConsoleAppender  
    log4j.appender.console.Target = System.out  
    log4j.appender.console.layout = org.apache.log4j.PatternLayout 
     
    log4j.appender.console.layout.ConversionPattern =[%d{yyyy-MM-dd HH:mm:ss,SSS}]-[%p]:%m   %x %n 
     
    log4j.appender.infoFile = org.apache.log4j.DailyRollingFileAppender  
    log4j.appender.infoFile.Threshold = INFO  
    log4j.appender.infoFile.File = D:/logs/log
    log4j.appender.infoFile.DatePattern = '.'yyyy-MM-dd'.log'  
    log4j.appender.infoFile.Append=true
    log4j.appender.infoFile.layout = org.apache.log4j.PatternLayout  
    log4j.appender.infoFile.layout.ConversionPattern =[%d{yyyy-MM-dd HH:mm:ss,SSS}]-[%p]:%m  %x %n 
     
    log4j.appender.errorFile = org.apache.log4j.DailyRollingFileAppender  
    log4j.appender.errorFile.Threshold = ERROR  
    log4j.appender.errorFile.File = D:/logs/error  
    log4j.appender.errorFile.DatePattern = '.'yyyy-MM-dd'.log'  
    log4j.appender.errorFile.Append=true  
    log4j.appender.errorFile.layout = org.apache.log4j.PatternLayout  
    log4j.appender.errorFile.layout.ConversionPattern =[%d{yyyy-MM-dd HH:mm:ss,SSS}]-[%p]:%m  %x %n
     
    log4j.appender.debugfile = org.apache.log4j.DailyRollingFileAppender  
    log4j.appender.debugfile.Threshold = DEBUG  
    log4j.appender.debugfile.File = D:/logs/debug  
    log4j.appender.debugfile.DatePattern = '.'yyyy-MM-dd'.log'  
    log4j.appender.debugfile.Append=true  
    log4j.appender.debugfile.layout = org.apache.log4j.PatternLayout  
    log4j.appender.debugfile.layout.ConversionPattern =[%d{yyyy-MM-dd HH:mm:ss,SSS}]-[%p]:%m  %x %n

    启动应用 访问http://localhost:8001/druid/login.html   用户名:admin   密码:admin

    跨域请求CORS实现

    新建一个CORS配置类 实现WebMvcConfigurer接口

    CorsConfig.java

    @Configuration
    public class CorsConfig implements WebMvcConfigurer {
    
        @Override
        public void addCorsMappings(CorsRegistry registry){
            registry.addMapping("/**")   //允许跨域访问的路径
                    .allowedOrigins("*")   //允许跨域访问的源
                    .allowedMethods("POST","GET","PUT","OPTIONS","DELETE")  //允许请求的方法
                    .maxAge(168000)   //预检间隔时间
                    .allowedHeaders("*")  //允许头部设置
                    .allowCredentials(true);  //是否发送cookie
        }
    }
  • 相关阅读:
    Linux下 高性能、易用、免费的ASP.NET服务器
    K-means算法
    K-means算法
    机器学习之深度学习
    机器学习之深度学习
    Tracking-Learning-Detection (TLD算法总结)
    Tracking-Learning-Detection (TLD算法总结)
    机器学习技法之Aggregation方法总结:Blending、Learning(Bagging、AdaBoost、Decision Tree)及其aggregation of aggregation
    机器学习技法之Aggregation方法总结:Blending、Learning(Bagging、AdaBoost、Decision Tree)及其aggregation of aggregation
    迭代是人,递归是神(迭代与递归的总结:比较)
  • 原文地址:https://www.cnblogs.com/Jansens520/p/11830706.html
Copyright © 2020-2023  润新知