欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Spring学习------配置数据源(c3p0数据源)、注解开发

程序员文章站 2022-05-24 14:56:56
...

配置数据源:

    <bean name="datasource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="${jdbc.driver}"/>
        <property name="jdbcUrl" value="${jdbc.url}"/>
        <property name="user" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
    </bean>

其中的value值我引用的自己创建的jdbc.properties文件,可以修改
下面是一些其他属性
C3P0拥有比DBCP更丰富的配置属性,通过这些属性,可以对数据源进行各种有效的控制:
acquireIncrement:当连接池中的连接用完时,C3P0一次性创建新连接的数目;
acquireRetryAttempts:定义在从数据库获取新连接失败后重复尝试获取的次数,默认为30;
acquireRetryDelay:两次连接中间隔时间,单位毫秒,默认为1000;
autoCommitOnClose:连接关闭时默认将所有未提交的操作回滚。默认为false;
automaticTestTable: C3P0将建一张名为Test的空表,并使用其自带的查询语句进行测试。如果定义了这个参数,那么属性preferredTestQuery将被忽略。你 不能在这张Test表上进行任何操作,它将中为C3P0测试所用,默认为null;
breakAfterAcquireFailure:获取连接失败将会引起所有等待获取连接的线程抛出异常。但是数据源仍有效保留,并在下次调 用getConnection()的时候继续尝试获取连接。如果设为true,那么在尝试获取连接失败后该数据源将申明已断开并永久关闭。默认为 false;
checkoutTimeout:当连接池用完时客户端调用getConnection()后等待获取新连接的时间,超时后将抛出SQLException,如设为0则无限期等待。单位毫秒,默认为0;
connectionTesterClassName: 通过实现ConnectionTester或QueryConnectionTester的类来测试连接,类名需设置为全限定名。默认为 com.mchange.v2.C3P0.impl.DefaultConnectionTester;
idleConnectionTestPeriod:隔多少秒检查所有连接池中的空闲连接,默认为0表示不检查;
initialPoolSize:初始化时创建的连接数,应在minPoolSize与maxPoolSize之间取值。默认为3;
maxIdleTime:最大空闲时间,超过空闲时间的连接将被丢弃。为0或负数则永不丢弃。默认为0;
maxPoolSize:连接池中保留的最大连接数。默认为15;
maxStatements:JDBC的标准参数,用以控制数据源内加载的PreparedStatement数量。但由于预缓存的Statement属 于单个Connection而不是整个连接池。所以设置这个参数需要考虑到多方面的因素,如果maxStatements与 maxStatementsPerConnection均为0,则缓存被关闭。默认为0;
maxStatementsPerConnection:连接池内单个连接所拥有的最大缓存Statement数。默认为0;
numHelperThreads:C3P0是异步操作的,缓慢的JDBC操作通过帮助进程完成。扩展这些操作可以有效的提升性能,通过多线程实现多个操作同时被执行。默认为3;
preferredTestQuery:定义所有连接测试都执行的测试语句。在使用连接测试的情况下这个参数能显著提高测试速度。测试的表必须在初始数据源的时候就存在。默认为null;
propertyCycle: 用户修改系统配置参数执行前最多等待的秒数。默认为300;
testConnectionOnCheckout:因性能消耗大请只在需要的时候使用它。如果设为true那么在每个connection提交的时候都 将校验其有效性。建议使用idleConnectionTestPeriod或automaticTestTable
等方法来提升连接测试的性能。默认为false;
testConnectionOnCheckin:如果设为true那么在取得连接的同时将校验连接的有效性。默认为false。

注解开发:
旧注解:替代applcationContext.xml文件中的bean配置语句
使用时要开启注解扫描,在applicationContext.xml文件中配置如下:

    <!--扫描范围-->
    <context:component-scan base-package="com.fyp"/>
    <!--开启注解-->
    <context:annotation-config></context:annotation-config>

@Component:用于实例化bean对象,最原始,其他旧bean注解底层依赖它
@Controller:用于web层进行实例化bean对象

@Controller("control")
public class Control {
    public static void main(String[] args) {
    }
}

@Service:用于service层进行实例化bean对象

@Service("userService")//Service层注入
public class UserServiceImpl implements UserService {
  
}

@Repository:用于dao层进行实例化bean对象

@Repository("userDao")
public class UserDaoImpl implements UserDao {
}

@Autowired:用于类中字段的注入,比如某个私有的User类型的user字段,它是根据字段类型进行依赖注入的

 @Autowired  根据属性类型进行依赖注入
    private UserDao userDao;

@Qualifier:它是根据bean的id名进行依赖注入

@Qualifier("userDao")  根据beanid进行注入
    private UserDao userDao;

@Resource:他是@[email protected]的合并,根据名字进行注入

@Resource(name = "userDao")  //相当于@[email protected]一起用,根据名字进行注入
    private UserDao userDao;

@Value:进行普通属性的注入

 //普通属性注入
    @Value("${jdbc.driver}")
    private String driver;

@Scope:配置bean对象的作用范围

新注解:减少配置文件,增加了配置类
@Configuration:标注该类为Spring配置类
直接在自己设定的核心配置类名前配置该注解

@Configuration
//@ComponentScan("com.fyp")
//@Import(DataSourceConfig.class)
public class SpringConfig {

}

@ComponentScan:用于配置扫描范围与配置文件中<context:component-scan base-package=“com.fyp”/>作用一样
同样在核心配置类前配置该注解

//@Configuration
@ComponentScan("com.fyp")
//@Import(DataSourceConfig.class)
public class SpringConfig {

}

@Bean:标注于方法上,会将方法的返回值放入Spring容器中

@Bean("datasource")
    public DataSource getDataSource() throws Exception{
        ComboPooledDataSource comboPooledDataSource = new ComboPooledDataSource();
        comboPooledDataSource.setDriverClass(driver);
        comboPooledDataSource.setJdbcUrl(url);
        comboPooledDataSource.setUser(username);
        comboPooledDataSource.setPassword(password);
        return comboPooledDataSource;
    }

@PropertySource:用于加载后缀为.properties文件中的配置
数据
在某个配置类前配置该注解

@PropertySource("classpath:jdbc.properties")
public class DataSourceConfig {

    @Value("${jdbc.driver}")
    private String driver;
    @Value("${jdbc.url}")
    private String url;
    @Value("${jdbc.username}")
    private String username;
    @Value("${jdbc.password}")
    private String password;
    public DataSource getDataSource() throws Exception{
        ComboPooledDataSource comboPooledDataSource = new ComboPooledDataSource();
        comboPooledDataSource.setDriverClass(driver);
        comboPooledDataSource.setJdbcUrl(url);
        comboPooledDataSource.setUser(username);
        comboPooledDataSource.setPassword(password);
        return comboPooledDataSource;
    }

}

@Import:用于引入其他文件。
在核心配置类或者其他配置类前配置该注解

//@Configuration
//@ComponentScan("com.fyp")
@Import(DataSourceConfig.class)
public class SpringConfig {
}

参考:
四种数据源配置
https://blog.csdn.net/orclight/article/details/8616103

相关标签: spring spring