《Spring实战》摘录 - 19
181
Q: #10.2.1 | JNDI是什么
A: Java命名和目录接口(Java Naming and Directory Interface,缩写JNDI),是Java的一个目录服务应用程序界面(API),它提供一个目录系统,并将服务名称与对象关联起来,从而使得开发人员在开发过程中可以使用名称来访问对象。
182
Q: #10.2.2-1 | 常用的数据库连接池有哪些
A:
- Apache Commons DBCP (http://jakarta.apache.org/commons/dbcp);
- c3p0 (http://sourceforge.net/projects/c3p0/) ;
- BoneCP (http://jolbox.com/) 。
- Druid( https://github.com/alibaba/druid)
183
Q: #10.2.2-2 | bean的方式配置连接池
A:
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
p:driverClassName="org.h2.Driver"
p:url="jdbc:h2:tcp://localhost/~/spitter"
p:username="sa"
p:password=""
p:initialSize="5"
p:maxActive="10" />
184
Q: #10.2.2-3 | Java的方式配置连接池
A:
@Bean
public BasicDataSource dataSource() {
BasicDataSource ds = new BasicDataSource();
ds.setDriverClassName("org.h2.Driver");
ds.setUrl("jdbc:h2:tcp://localhost/~/spitter");
ds.setUsername("sa");
ds.setPassword("");
ds.setInitialSize(5);
ds.setMaxActive(10);
return ds;
}
185
Q: #10.2.2-4 | BasicDataSource的池配置属性
A:
- initialSize --- 池启动时创建的连接数量
- maxActive --- 同一时间可从池中分配的最多连接数。如果设置为0,表示无限制
- maxIdle --- 池里不会被释放的最多空闲连接数。如果设置为0,表示无限制
- maxOpenPreparedStatements --- 在同一时间能够从语句池中分配的预处理语句(prepared statement)的最大数量。如果设置为0,表示无限制
- maxWait --- 在抛出异常之前,池等待连接回收的最大时间(当没有可用连接时)。如果设置为-1,表示无限等待
- minEvictableIdleTimeMillis --- 连接在池中保持空闲而不被回收的最大时间
- minIdle --- 在不创建新连接的情况下,池中保持空闲的最小连接数
- poolPreparedStatements --- 是否对预处理语句(prepared statement)进行池管理(布尔值)
186
Q: #10.2.3-1 | 在Spring中,通过JDBC驱动定义数据源是最简单的配置方式。Spring提供了三个这样的数据源类(均位于org.springframework.jdbc.datasource包中)供选择:
A:
- DriverManagerDataSource:在每个连接请求时都会返回一个新建的连接。与DBCP的BasicDataSource不同,由DriverManagerDataSource提供的连接并没有进行池化管理;
- SimpleDriverDataSource:与DriverManagerDataSource的工作方式类似,但是它直接使用JDBC驱动,来解决在特定环境下的类加载问题,这样的环境包括OSGi容器;
- SingleConnectionDataSource:在每个连接请求时都会返回同一个的连接。尽管SingleConnectionDataSource不是严格意义上的连接池数据源,但是你可以将其视为只有一个连接的池
187
Q: #10.2.3-2 | 推荐使用数据库连接池的原因
A: 因为SingleConnectionDataSource有且只有一个数据库连接,所以不适合用于多线程的应用程序,最好只在测试的时候使用。而DriverManagerDataSource和SimpleDriverDataSource尽管支持多线程,但是在每次请求连接的时候都会创建新连接,这是以性能为代价的。鉴于以上的这些限制,我强烈建议应该使用数据源连接池。
188
Q: #10.2.5-1 | 借助Spring的profile特性能够在运行时选择数据源
A:
package com.habuma.spittrconfig
import org.apache commons.dbep.BasicDataSource;
import javax.sql.DataSource;
import org.springframework context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework context.annotation.Profile;
import org.springframework.jdbcdatasource embedded.EmbeddedDatabaseBuilder;
import org.springframework.jdbc..embedded.EmbeddedData;
import org.springframework.jndi.UndiobjectFactoryBean;
@Configuration
public class DataSourceConfiguration
@Profile("development")//开发数据源
@Bean
public Datasource embeddedDataSource (){
return new EmbeddedDatabaseBuilder ()
.setType(EmbeddedDatabaseType.H2)
.adscript("classpath:schema.sql")
.adsCript("classpath:test-data.sql")
.build();
}
@Profile("qa")//QA数据源
@Bean
public DataSource Data(){
BasicDataSource ds new BasicDatas()
ds.setDriverclassName("org.h2.Driver"):
ds.setUrl("jdbc: h2: tcp: ///~/spitter");
ds.setUsername("sa");
ds.setPassword("");
ds.setInitialsize(5);
ds.setMaxActive(10);
return ds;
}
@Profile("production")//生产环境数据源
@Bean
public DataSource dataSource(){
JndiobjectFactoryBean jndiobjectFactoryBean = new JndiobjectFactoryBean();
jindiobjectFactoryBean.setJndiName("jdbc/SpittrDS");
jindiobjectFactoryBean.setResourceR(true);
jindiobjectFactoryBean.setProxyInter(javax.sql.DataSource.class);
return (Datasource)jindiobjectFactoryBean.getobject();
}
}
189
Q: #10.2.5-2 | 借助XML配置,基于profile选择数据源
A:
<?xml version="1. 0" encoding="UTF-8"?>
<beans xmlns="http: //www.spr org/schema/beans"
xmIns: xsi="http://www.w3.org/2001/XMLSchema-instance"
xmins: jdbe="http: //www. springfrar, org/schema/jabe"
xmIns: jee="http: //www.springfram, org/schema/jee"
xmins: p="http: //www. springfram. org/schema/p"
xsi: schemaLocation="http: //www.springframework. org/schema/jdbc
http: //www. springframework. org/scher/jdbc/spring-jdbc-31.xsd
http: //www.springframework.org/schema/jee
http: //www.springframework. org/schema/jee/spring-jee-3.1.xsd
http: //www. springframework. org/:/beans
http: //www.springframework. org/schema/beans/spring-beansxsd">
<beans profiledevelopment>(html comment removed: 开发数据源 )
<jdbc: embedded-database id="datasource"type="H2">
<jdbc: script location="com/hab uma/spitter/db/jdbc/schema.sql"/>
<jdbc: script location="com/habum a/spitter/ab/jdbc/test-data. sql"/>
</jdbc: embedded-database>
</beans>
<beans profile="ga">
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
p:driverclassName="org.h2.Driver"
p:url="jdbc:h2:tcp://localhost~/spitter"
p:username="sa"
p:password=""
p:initialsize="5"
p:maxActive="10"/>
</beans>
<beans profile="production">
<jee:jndi-lookup id="datasource" jndi-name="/jdbc/SpitterDS" resource-ref="true"/>
</beans>
</beans>
190
Q: #11-1 | Spring对ORM框架的支持提供了与这些框架的集成点以及一些附加的服务
A:
- 支持集成Spring声明式事务;
- 透明的异常处理;
- 线程安全的、轻量级的模板类;
- DAO支持类;
- 资源管理。
Congratulations @huaiying! You received a personal award!
You can view your badges on your Steem Board and compare to others on the Steem Ranking
Vote for @Steemitboard as a witness to get one more award and increased upvotes!