JAVA-第十部分-Spring-配置数据源和注解配置

371 阅读1分钟

写在前面

Spring配置数据源

  • c3p0
ComboPooledDataSource comboPooledDataSource = new ComboPooledDataSource();
//注册驱动
comboPooledDataSource.setDriverClass("com.mysql.cj.jdbc.Driver");
//配置
comboPooledDataSource.setJdbcUrl("jdbc:mysql://localhost:3306/dbtest3");
comboPooledDataSource.setUser("root");
comboPooledDataSource.setPassword("123456789");

//获取连接
Connection connection = comboPooledDataSource.getConnection();
System.out.println(connection);
connection.close();
  • 手动导入配置
ResourceBundle bundle = ResourceBundle.getBundle("c3p0");
String driverClass = bundle.getString("driverClass");
String jdbcUrl = bundle.getString("jdbcUrl");
String user = bundle.getString("user");
String password = bundle.getString("password");
ComboPooledDataSource comboPooledDataSource = new ComboPooledDataSource();
//注册驱动
comboPooledDataSource.setDriverClass(driverClass);
....
  • druid
DruidDataSource druidDataSource = new DruidDataSource();
//注册驱动
druidDataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
//配置
druidDataSource.setUrl("jdbc:mysql://localhost:3306/dbtest3");
druidDataSource.setUsername("root");
druidDataSource.setPassword("123456789");

DruidPooledConnection connection = druidDataSource.getConnection();
System.out.println(connection);
connection.close();

通过xml文件配置

  • 配置bean,直接设置属性
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
    <property name="driverClass" value="com.mysql.cj.jdbc.Driver"></property>
    <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/dbtest3"></property>
    <property name="user" value="root"></property>
    <property name="password" value="123456789"></property>
</bean>
  • 在pom中加载properties文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation=
               "http://www.springframework.org/schema/beans
                http://www.springframework.org/schema/beans/spring-beans.xsd
                http://www.springframework.org/schema/context
                http://www.springframework.org/schema/context/spring-context.xsd">
    <!--加载外部properties文件,properties的key值不要与属性名重名-->
    <context:property-placeholder location="classpath:c3p0.properties"/>
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="${jdbc.driver}"></property>
        <property name="jdbcUrl" value="${jdbc.url}"></property>
        <property name="user" value="${jdbc.user}"></property>
        <property name="password" value="${jdbc.password}"></property>
    </bean>
</beans>

注解配置

  • spring轻代码重配置
  • 原始注解替代配置
  • 指定spring在初始化时要扫描的包
<!--组件扫描 告诉哪个包下的标签需要被扫描-->
<context:component-scan base-package="com.java"/>
<bean id="userDao" class="com.java.test.dao.impl.UserDaoImpl"></bean>
<bean id="userService" class="com.java.test.service.impl.UserServiceImpl">
    <property name="userDao" ref="userDao"></property>
</bean>
  • 注解形式
//<bean id="userDao" class="com.java.test.dao.impl.UserDaoImpl"></bean>
@Component("userDao")
public class UserDaoImpl implements UserDao {
    public void sava() {
        System.out.println("UserDaoImpl - save");
    }
}

//<bean id="userService" class="com.java.test.service.impl.UserServiceImpl">
@Component("userService")
public class UserServiceImpl implements UserService {
    //<property name="userDao" ref="userDao"></property>
    //通过注解进行配置属性,可以省略set方法
    @Autowired //按照数据类型在pom中匹配注入
    @Qualifier("userDao")//按照id值从容器中进行匹配,指定注入属性
    private UserDao userDao;
    
    public void save() {
        userDao.sava();
    }
}

原始注解

image.png

  • value注解可以结合pom文件的配置进行输出
@Value("${jdbc.driver}")
private String driver;
  • scope、postConstruct、preDestroy 类比bean标签的属性设置效果

新注解

image.png

  • Configuration,指定配置类
@Configuration
public class SpringConfiguration {
}
  • 新注解示例,配置总类
//指定配置类
@Configuration
//<context:component-scan base-package="com.java"/>
@ComponentScan("com.java")
//里面是数组
@Import({SpringDataSourceConfiguration.class})
public class SpringConfiguration {

}
  • 配置分类
//<context:property-placeholder location="classpath:c3p0.properties"/>
@PropertySource("classpath:c3p0.properties")
public class SpringDataSourceConfiguration {
    @Value("${jdbc.driver}")
    private String driver;
    @Value("${jdbc.url}")
    private String url;
    @Value("${jdbc.user}")
    private String user;
    @Value("${jdbc.password}")
    private String password;

    @Bean("dataSource") //spring会将当前方法的返回值以指定名称存储中spring容器中
    public DataSource getDataSource() throws PropertyVetoException {
        ComboPooledDataSource comboPooledDataSource = new ComboPooledDataSource();
        //注册驱动
        comboPooledDataSource.setDriverClass(driver);
        //配置
        comboPooledDataSource.setJdbcUrl(url);
        comboPooledDataSource.setUser(user);
        comboPooledDataSource.setPassword(password);
        return comboPooledDataSource;
    }
}
  • 调用
//用注解配置类进行配置
AnnotationConfigApplicationContext annotationConfigApplicationContext = new AnnotationConfigApplicationContext(SpringConfiguration.class);
ComboPooledDataSource dataSource = (ComboPooledDataSource)annotationConfigApplicationContext.getBean("dataSource");
Connection connection = dataSource.getConnection();
System.out.println(connection);
connection.close();

加载xml文件

@ImportResource("classpath:applicationContext.xml")