Gerenciamento de configuração de recursos de terceiros do Spring

insira a descrição da imagem aqui
[Tecnologia Spring] Arquitetura Spring
[Tecnologia Spring] Spring IOC e caso de entrada DI
[Tecnologia Spring] Configuração e exemplos de Spring Bean
[Tecnologia Spring] Injeção de dependência Spring (Configuração DI)
[Tecnologia Spring] Gerenciamento de configuração de recursos terceirizados Spring
[Tecnologia Spring ] Spring Container Technology
[Spring Technology] Spring Annotation Development
[Spring Technology] Spring Integration Mybatis&Junit Unit Test
[Spring Technology] Spring AOP
[Spring Technology] Spring Transaction Management

Descrição: Use o gerenciamento de objetos do pool de conexões DataSource como um exemplo para explicar o gerenciamento de configuração de recursos de terceiros

1. Gerenciar objetos do pool de conexões DataSource

problema de importação

Ao configurar os parâmetros de conexão do banco de dados, o nome da classe do driver injetado deve ser driverClassName ou driver?

1.1 Gerenciar o pool de conexões do Druid [pontos-chave]

preparação de banco de dados

create database if not exists spring_db character set utf8;
use spring_db;
create table if not exists tbl_account(
    id int primary key auto_increment,
    name varchar(20),
    money double
);
insert into tbl_account values(null,'Tom',1000);
insert into tbl_account values(null,'Jerry',1000);

[Etapa 1] Adicionar dependência do pool de conexões Druid

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.1.16</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.47</version>
</dependency>

Observação: além de adicionar as duas dependências acima, não se esqueça de adicionar as dependências de contexto de primavera.

[Etapa 2] Configurar o objeto Bean do pool de conexões DruidDataSource

<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
    <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://localhost:3306/spring_db"/>
    <property name="username" value="root"/>
    <property name="password" value="root"/>
</bean>

[Etapa 3] Obtenha o objeto pool de conexão do contêiner IOC na classe de teste e imprima-o

public class App {
    
    
    public static void main(String[] args) {
    
    
        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
        DataSource dataSource = (DataSource) ctx.getBean("dataSource");
        System.out.println(dataSource);
    }
}

1.2 Gerenciar pool de conexões c3p0

[Etapa 1] Adicionar dependência do pool de conexão c3p0

<dependency>
    <groupId>c3p0</groupId>
    <artifactId>c3p0</artifactId>
    <version>0.9.1.2</version>
</dependency>

[Etapa 2] Configurar o objeto Bean do pool de conexões c3p0

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
    <property name="driverClass" value="com.mysql.jdbc.Driver"/>
    <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/spring_db"/>
    <property name="user" value="root"/>
    <property name="password" value="root"/>
    <property name="maxPoolSize" value="1000"/>
</bean>

Observação: não pode haver dois pools de conexão com id="dataSource" no mesmo contêiner Spring.

[Etapa 3] Obtenha o objeto pool de conexão do contêiner IOC na classe de teste e imprima-o

public class App {
    
    
    public static void main(String[] args) {
    
    
        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
        DataSource dataSource = (DataSource) ctx.getBean("dataSource");
        System.out.println(dataSource);
    }
}

2. Carregue o arquivo de propriedade de propriedades [chave]

Objetivo: Extrair os parâmetros de conexão do banco de dados em um arquivo separado e desacoplá-lo do arquivo de configuração do Spring.

problema de importação

Pergunta 1: Como resolver o problema de que a propriedade do sistema é lida como resultado do uso da expressão EL para ler o valor no arquivo de propriedades?

Pergunta 2: Como escrever o método de gravação padrão para carregar o arquivo de propriedades?

2.1 Uso básico

[Etapa 1] Grave o arquivo de propriedade jdbc.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/spring_db
jdbc.username=root
jdbc.password=root

[Etapa 2] Abra o namespace de contexto em applicationContext.xml e carregue o arquivo de propriedade jdbc.properties

imagem-20210730101826913

Dica: Se os alunos acharem que o método de copiar e colar acima não é fácil de alterar ou corrigir erros, na verdade, a ideia tem uma função de prompt, apenas tome cuidado para não escolher o errado. Algumas versões da ideia não possuem esse prompt, então basta seguir o método de copiar e colar acima para modificá-lo. Após a modificação, ele pode ser transformado em um modelo de modelo ativo, que pode ser usado diretamente mais tarde.

imagem-20210730102053281

<context:property-placeholder location="jdbc.properties"/>

[Etapa 3] Use a expressão EL para obter o valor no arquivo de propriedades jdbc.properties onde o bean do pool de conexão está configurado

<bean class="com.alibaba.druid.pool.DruidDataSource">
    <property name="driverClassName" value="${jdbc.driver}"/>
    <property name="url" value="${jdbc.url}"/>
    <property name="username" value="${jdbc.username}"/>
    <property name="password" value="${jdbc.password}"/>
</bean>

Depois que a configuração estiver concluída, execute o código anterior para obter o pool de conexões do Druid e, se o objeto pool de conexões puder ser obtido, a configuração será bem-sucedida.

2.2 A configuração não carrega as propriedades do sistema

pergunta

Se a configuração no arquivo de propriedade não for jdbc.username, mas username=root666, use ${username} para obter não root666, mas o nome do computador.

razão

A propriedade do sistema tem precedência sobre aquela em nosso arquivo de propriedades, substituindo nosso nome de usuário=root666.

resolver

Solução 1: altere o nome, por exemplo, em vez de nome de usuário, chame jdbc.username.

Solução 2: Use o atributo system-properties-mode="NEVER" para indicar que as propriedades do sistema não são usadas.

<context:property-placeholder location="jdbc.properties" system-properties-mode="NEVER"/>

2.3 Método de gravação do arquivo de propriedades de carregamento

  • Não carregue as propriedades do sistema
<context:property-placeholder location="jdbc.properties" system-properties-mode="NEVER"/>
  • Carregar vários arquivos de propriedades
<context:property-placeholder location="jdbc.properties,msg.properties"/>
  • Carregar todos os arquivos de propriedades
<context:property-placeholder location="*.properties"/>
  • Carregar arquivo de propriedades**Formato padrão**
<context:property-placeholder location="classpath:*.properties"/>
  • Carregar formato padrão do arquivo de propriedades
<context:property-placeholder location="classpath*:*.properties"/>

Acho que você gosta

Origin blog.csdn.net/qq_51808107/article/details/130317170
Recomendado
Clasificación