SpringBoot estudo especial Part19: configuração SpringBoot e monitoramento usando fonte de dados JDBC e molde do Druid

Para camada de acesso a dados , quer do banco de dados SQL ou banco de dados NoSQL padrões Primavera Bota de dados Primavera de integrar uma forma unificada de lidar
e Primavera Dados Lane, acrescentou um monte de configuração automática também apresenta uma variedade Template Repository e simplificar o funcionamento da camada de acesso a dados facilitar muito o desenvolvedor
e, portanto, apenas um conjunto simples de

Primeiro, a configuração e uso JDBC e Template

1, configurado para usar JDBC

Os passos são trilogia simples:

  • 1 ,引入partida: spring-boot-starter-jdbc
  • 2 , application.yml colocado
  • 3 , teste

Se o projeto se o Initializer com SpringBoot começar a criar e adicionar o driver MySQL JDBC pode:
Aqui Insert Picture Descrição
Se você precisa criar um projeto dependem da introdução da introdução manual:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>

Em seguida, configure
yml configuração:

spring:
  datasource:
    username: root
    password: 123456
    url: jdbc:mysql://数据库ip:3306/数据库名
    driver-class-name: com.mysql.cj.jdbc.Driver

Então você pode simplesmente testado
no momento de testar se um erro:
java.sql.SQLException: no valor de Servidor Time Zone 'й ׼ʱ' está fora com despercebidas ou representa by One More Time No mês passado o configure a MUST quer por você no Zone. servidor ou driver JDBC (através do ' serverTimezone' propriedade de configuração) para usar um valor mais fuso horário specifc se você quiser utilizar o suporte de fuso horário.

Então, mais tarde no arquivo de configuração mais a url ?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTCpara

Todas as informações de configuração neste DataSourceProperties classe

Princípio é automaticamente configurada sob pacote org.springframework.boot.autoconfigure.jdbc DataSourceConfiguration classe é determinado de acordo com a fonte de dados de configuração que
pode ser utilizada no ficheiro de configuração spring.datasource.typetipo especificado fonte de dados
padrão SpringBoot 2.x, construída uma nova versão ele suporta três fontes de dados:

  • org.apache. tomcat.jdbc.pool.DataSource
  • Ver detalhes Mostrar Mapa Hikari DataSource
  • org.apache.commons. dbcp2 .BasicDataSource

É claro, também ser costume c3p0 Druid da classe por exemplo

Primavera antes versão boot1.5 é usado por padrão tomcat pool de conexão
após a versão primavera boot2.0 é usado por padrão HikariCP pool de conexão

Na classe DataSourceAutoConfiguration inferior ao container IOC adiciona um DataSourceInitializerInvoker classe ou seja, classe de inicialização fonte de dados
desta classe é realmente um ouvinte por DataSourceInitializer citado initSchema para executar a instrução mesa de construção e método de inserção de declaração de dados SQL ()
o já subjacentes chamado inicializado para que se a construção da declaração mesa simplesmente nomear o arquivo schema-*.sqldesse tipo pode ser
o nome padrão é schemaou schema-allpara que o nome do arquivo sql e, em seguida, colocados em tais recursos diretório podem ser identificados e depois carregados na inicialização tempo
lata pelo arquivo de configuração spring.datasource.schemapara especificar a localização e nome do arquivo sql
Exemplo:

spring:
  datasource:
    schema: classpath:department.sql

Se a dados são inseridos declaração simplesmente nomear o arquivo data-*.sqlpara

Nota : Em Spring2.x nova versão se você quiser executar o arquivo de configuração sql deve também spring.datasource.initialization-mode=alwaysindicam consistentemente executar a inicialização
ou padrão de inicialização única incorporado fonte de dados sem causar arquivo de inicialização do SQL não será executado para todas as fontes de dados

2, para operar a base de dados utilizando JdbcTemplate

SpringBoot JDBC inferior foi configurado JdbcTemplate , por conseguinte, pode ser utilizado directamente para uso

código de teste (adicionar um web-starter):

@Controller
public class DoJdbcController {

    @Autowired
    JdbcTemplate jdbcTemplate;

    @GetMapping("/query")
    @ResponseBody
    public Map<String,Object> map()
    {
        List<Map<String, Object>> list = jdbcTemplate.queryForList("select * from department");
        return list.get(0);
    }
}

Efeito:
Aqui Insert Picture Descrição
Muito fácil


Em segundo lugar, a configuração e uso de monitoramento e fontes de dados Druid

Druid Ali de uma fonte de dados uma característica principal é fornecer uma função de monitoramento é muito conveniente

1, fonte de dados integração Druid

A primeira é a de adicionar uma dependência:

<dependency>
	<groupId>com.alibaba</groupId>
	<artifactId>druid</artifactId>
	<version>1.1.10</version>
</dependency>

Em seguida, a configuração dos dados do tipo especificado fonte:

spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource

Há muitos parâmetros de configuração:

spring:
  datasource:
#   数据源基本配置
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://数据ip:3306/数据库名
    type: com.alibaba.druid.pool.DruidDataSource
#   数据源其他配置
    initialSize: 5
    minIdle: 5
    maxActive: 20
    maxWait: 60000
    timeBetweenEvictionRunsMillis: 60000
    minEvictableIdleTimeMillis: 300000
    validationQuery: SELECT 1 FROM DUAL
    testWhileIdle: true
    testOnBorrow: false
    testOnReturn: false
    poolPreparedStatements: true
    filters: stat,wall,log4j # 配置监控统计拦截的filters 若去掉后则监控界面的sql无法统计 wall用于防火墙  
    maxPoolPreparedStatementPerConnectionSize: 20
    useGlobalDataSourceStat: true  
    connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500

No entanto, depois de apenas configuração não está em vigor porque essas propriedades não estão dentro dos DataSourceProperties
que essas propriedades e não podem ligar para o banco de dados de configuração, naturalmente, não vai funcionar

Daí a necessidade de configurar-se:
Crie a sua própria configuração de uma classe

@Configuration
public class DruidConfig {

    // 不用反射创建的数据源 而是自己创建
    @ConfigurationProperties(prefix = "spring.datasource")
    @Bean
    public DataSource druid()
    {
        return new DruidDataSource();
    }
}

Não pode relatar Causada por: java.lang.ClassNotFoundException: org.apache.log4j.Priority anormal
porque o pacote pacote de log SpringBoot Jar Jar e conflitos log Druid Existem vários métodos para resolver
um dos melhores solução pacote de conversor de log é introduzido:

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>log4j-over-slf4j</artifactId>
    <version>1.7.25</version>
</dependency>

solução perfeita
, então você pode desfrutar do uso do Druid

2, a configuração do controlo de dados de controlo Druid

fonte de dados configuração do monitor também é muito simples
de duas etapas é a configure Servlet outra é filtro configurado
é também ainda tem que ser configurada na classe de configuração que você cria

@Configuration
public class DruidConfig {

    // 配置Druid监控
    // 1、配置一个管理后台的Servlet 用于处理进入后台的请求
    @Bean
    public ServletRegistrationBean statViewServlet()
    {
        ServletRegistrationBean<StatViewServlet> srb = new ServletRegistrationBean<>(new StatViewServlet(), "/druid/*");
        // 设置初始化参数 更多参数在ResourceServlet类中
        Map<String,String> initParams=new HashMap<>();
        // 登录后台的用户名
        initParams.put("loginUsername","admin");
        // 登录后台的密码
        initParams.put("loginPassword","123456");
        // 允许访问的ip 默认或为空代表允许所有
        initParams.put("allow","");
        // 不允许访问的ip
        initParams.put("deny","111.111.111.111");
        srb.setInitParameters(initParams);
        return srb;
    }
    
    // 2、配置一个用于监控的Filter
    @Bean
    public FilterRegistrationBean webStatFilter()
    {
        FilterRegistrationBean<Filter> frb = new FilterRegistrationBean<>();
        // 传入Druid的监控Filter
        frb.setFilter(new WebStatFilter());
        // 设置初始化参数 更多参数在WebStatFilter类中
        Map<String,String> initParams=new HashMap<>();
        // 设置哪些路径不进行拦截 /druid不能拦截 因为这是监控的后台入口
        initParams.put("exclusions","*.js,*.css,/druid/*");
        frb.setInitParameters(initParams);
        // 设置拦截的请求
        frb.setUrlPatterns(Arrays.asList("/*"));
        return frb;
    }
}

Interface de fundo:
Aqui Insert Picture Descrição


Publicado 174 artigos originais · ganhou elogios 5 · Exibições 240.000 +

Acho que você gosta

Origin blog.csdn.net/Piconjo/article/details/105060286
Recomendado
Clasificación