首页 > 编程语言 >Java配置类

Java配置类

时间:2023-02-09 22:11:58浏览次数:53  
标签:jdbc Java String 配置 springframework dataSource org import

需求

通过java配置类实现一个数据库连接池。

以前xml中是这样写的:

    <!--配置德鲁伊数据库连接池-->
    <bean id="ds" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="${jdbc.driver}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
        <property name="url" value="${jdbc.url}"/>
    </bean>

 

java配置常用的注解

@Configuration :声明一个类作为配置类
@Bean :声明在方法上,将方法的返回值加入Bean容器
@value :属性注入
@PropertySource :指定外部属性文

  

环境准备

创建一个springboot工程:https://www.cnblogs.com/uncleyong/p/16197938.html

引入Druid连接池依赖:这里我们不导入druid数据源场景启动器:druid-spring-boot-starter

        <!--Druid连接池-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.10</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>

  

创建一个jdbc.properties文件,编写jdbc属性:

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://47.10.15.47:3306/gift?useUnicode=true&characterEncoding=utf-8&useSSL=true
jdbc.username=root
jdbc.password=123456

  

方式一:@Value注解注入

配置类

package com.qzcsbj.config;

import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.jdbc.JdbcProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;

import javax.sql.DataSource;

@Configuration
@PropertySource("classpath:jdbc.properties")  // 不是默认配置文件application.properties,需要指定
public class JdbcConfig {

    @Value("${jdbc.driverClassName}")
    String driverClassName;

    @Value("${jdbc.url}")
    String url;

    @Value("${jdbc.username}")
    String username;

    @Value("${jdbc.password}")
    String password;

    @Bean
    public DataSource dataSource() {
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setUrl(url);
        dataSource.setDriverClassName(driverClassName);
        dataSource.setUsername(username);
        dataSource.setPassword(password);
        return dataSource;
    }
}

 

然后我们就可以在任意位置通过 @Autowired 注入DataSource了

控制器

package com.qzcsbj.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import javax.sql.DataSource;
import java.sql.SQLException;


@RestController
public class HelloController {
    @Autowired
    DataSource dataSource;

    @RequestMapping(value={"hello"}, method = RequestMethod.GET)
    public String hello() throws SQLException {
        System.out.println("=====执行控制器======");
        System.out.println("连接对象:" + dataSource.getConnection());
        return "hello springboot";
    }
}

 

请求:http://localhost:8080/hello

 

debug测试

 

package com.qzcsbj.config;

import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.jdbc.JdbcProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;

import javax.sql.DataSource;

@Configuration
@PropertySource("classpath:jdbc.properties")  // 不是默认配置文件application.properties,需要指定
public class JdbcConfig {

    @Value("${jdbc.driverClassName}")
    String driverClassName;

    @Value("${jdbc.url}")
    String url;

    @Value("${jdbc.username}")
    String username;

    @Value("${jdbc.password}")
    String password;

    @Bean
    public DataSource dataSource() {
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setUrl(url);
        dataSource.setDriverClassName(driverClassName);
        dataSource.setUsername(username);
        dataSource.setPassword(password);
        // dataSource.setMaxActive(20);
        // dataSource.setMinIdle(5);
        // dataSource.setMaxIdle(10);
        // dataSource.setMaxWait(5000);
        // dataSource.setInitialSize(5);
        return dataSource;
    }
}

  

请求:http://localhost:8080/hello

 

package com.qzcsbj.config;

import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.jdbc.JdbcProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;

import javax.sql.DataSource;

@Configuration
@PropertySource("classpath:jdbc.properties")  // 不是默认配置文件application.properties,需要指定
public class JdbcConfig {

    @Value("${jdbc.driverClassName}")
    String driverClassName;

    @Value("${jdbc.url}")
    String url;

    @Value("${jdbc.username}")
    String username;

    @Value("${jdbc.password}")
    String password;

    @Bean
    public DataSource dataSource() {
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setUrl(url);
        dataSource.setDriverClassName(driverClassName);
        dataSource.setUsername(username);
        dataSource.setPassword(password);
        dataSource.setMaxActive(20);
        dataSource.setMinIdle(5);
        dataSource.setMaxIdle(10);
        dataSource.setMaxWait(5000);
        dataSource.setInitialSize(5);
        return dataSource;
    }
}

  

请求:http://localhost:8080/hello

 

可以看到,属性注入成功了。

 

方式二:SpringBoot的属性注入

在上面的案例中,只能注入基本类型值,在SpringBoot中,提供了一种新的属性注入方式,支持各种java基本数据类型及复杂类型的注入。

我们新建一个类,用来进行属性注入: 

package com.qzcsbj.config;

import org.springframework.boot.context.properties.ConfigurationProperties;

@ConfigurationProperties(prefix = "jdbc")
public class JdbcProperties {

    String url;
    String driverClassName;
    String username;
    String password;

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public String getDriverClassName() {
        return driverClassName;
    }

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

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

  

在类上通过@ConfigurationProperties注解声明当前类为属性读取类

prefix="jdbc" 读取属性文件中,前缀为jdbc的值

在类上定义各个属性,名称必须与属性文件中 jdbc. 后面部分一致

 

在JdbcConfig中使用这个属性:

package com.qzcsbj.config;

import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import javax.sql.DataSource;

@PropertySource("classpath:jdbc.properties")
@Configuration
@EnableConfigurationProperties(JdbcProperties.class)
public class JdbcConfig {
    @Bean  // 注入
    public DataSource dataSource(JdbcProperties jdbc) {
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setUrl(jdbc.getUrl());
        dataSource.setDriverClassName(jdbc.getDriverClassName());
        dataSource.setUsername(jdbc.getUsername());
        dataSource.setPassword(jdbc.getPassword());
        // dataSource.setMaxActive(20);
        // dataSource.setMinIdle(5);
        // dataSource.setMaxIdle(10);
        // dataSource.setMaxWait(5000);
        // dataSource.setInitialSize(5);
        return dataSource;
    }
}

 

debug测试

请求:http://localhost:8080/hello

 

方式三:SpringBoot更简洁的注入

如果一段属性只有一个Bean需要使用,我们无需将其注入到一个类(JdbcProperties)中,而是直接在需要的地方声明即可:

删除JdbcProperties,修改:JdbcConfig

package com.qzcsbj.config;

import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import javax.sql.DataSource;

@PropertySource("classpath:jdbc.properties")
@Configuration
public class JdbcConfig {
    @Bean
    @ConfigurationProperties(prefix = "jdbc")
    public DataSource dataSource() {
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setMaxActive(20);
        dataSource.setMinIdle(5);
        dataSource.setMaxIdle(10);
        dataSource.setMaxWait(5000);
        dataSource.setInitialSize(5);
        return dataSource;
    }
}

  

我们直接把 @ConfigurationProperties(prefix = "jdbc") 声明在需要使用的 @Bean 的方法上,然后完成注入。

使用的前提是:该类必须有对应属性的set方法,jdbc.properties中前缀后面的内容和DataSource中的对上,SpringBoot就会自动把相关属性通过set方法注入到DataSource中

上面JdbcConfig类中,可以调用对应的set方法,比如:dataSource.setUsername();

点击setUsername会调转到DruidAbstractDataSource类中

 

DruidAbstractDataSource类的继承关系:

 

debug测试

请求:http://localhost:8080/hello

 

【bak】

原文已更新:https://www.cnblogs.com/uncleyong/p/17103609.html

 

标签:jdbc,Java,String,配置,springframework,dataSource,org,import
From: https://www.cnblogs.com/uncleyong/p/17103609.html

相关文章

  • 强制转换数组为字符串 Java方法 传递数组形式的参数
    packagecom.fqs.demo;importjava.util.Arrays;publicclassChouJiang{publicstaticvoidmain(String[]args){int[]arr={2,8,9,10,88};......
  • WIN10配置IIS
         ......
  • Java-Integer好大一坑,一不小心就掉进去了
    遛马少年,一个代码写的很6的程序员,专注于技术干货分享最近,在处理线上bug的时候,发现了一个奇怪的现象业务代码大概是这样的publicstaticbooleandoSth(Integerx,Int......
  • 使用配置类替代xml配置文件
    创建配置类packagecom.xxx.spring.config;importorg.springframework.context.annotation.ComponentScan;importorg.springframework.context.annotation.Configur......
  • Spring配置类理解(Lite模式和Full模式)
    Spring中的注解大家在开发中都常常用到,但是如果我说我们常常用的注解修饰了一个类,表示这个类就是一个配置类很多开发者都会有点迷糊了。具体配置类在开发中有什么样的用途......
  • Prometheus监控java
    1、使用jmxexporter暴露监控指标:java启动时通过指定参数 -javaagent的形式运行jmxexporter的jar包,进程内读取jvm运行时状态数据,转换为Prometheusmetrics格式,并......
  • javascript 提取字符串方法 slice substr substring
    本文将对javascript提取字符串的三个方法slice/substr/substring,进行分析。这三个方法都具有提取字符串的功能,且都有两个参数。下面将详细介绍三个方法在一些特殊参数值......
  • 游戏服务器如何选择合适的服务器配置
    游戏服务器如何选择合适的服务器配置大家好,今天给大家分享一下游戏服务器配置的选择,为什么特别的说明一下服务器呢?服务器是决定服稳定性和安全性最重要的一个程序,如果是服务......
  • JavaScript实现数组对象去重
    有多种实现方式:一、使用Set对象:Array.from(newSet(array))该方法会先创建一个Set对象,然后再使用Array.from方法将Set对象转换为数组,因为Set对象不允许有......
  • kafka配置详解
    关闭自动消费Spring-Boot-kafka的配置中有一个参数,提供了自动消费的功能。使用自动消费我们在收到消息的时候会自动向kafka确认消费。但是在一些特殊场景中我们可能需要使......