您的位置:首页 > 编程语言 > Java开发

搭建简单web项目:spring3.0基本配置(2)

2010-10-27 16:41 716 查看
本文为个人学习,记录,交流用. 欢迎大家讨论,提建议,补充或指出错误. 但请不要转载不打招呼.

继续第一节的内容, 在配置完基础的spring依赖注入后, 接来下把日志和数据库配置一下.

第一部分:log4j日志, 关于log4j和spring的配置,网上已经文章大把大把的了, 就简单说一下配置过程.
虽然common-logging就可以满足大多基本的日志需求, 不过这里还是引入一下log4j的配置. spring同时还支持SLF4J, 好吧我没说听过.

spring配置log4j
第一步:引入log4j的jar包. 写此文时最新版本已是log4j-1.2.16.jar, spring3.0附送的是log4j-1.2.15.jar.应该没什么差别.
第二步(可省):在web.xml里配置
<context-param>
<param-name>webAppRootKey</param-name>
<param-value>myProject.root</param-value>
</context-param>
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/conf/log4j.properties</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>

这一步的作用就是让spring帮忙照料下log4j的配置文件管理, 如果跳过第二步, 这里其实就和spring没什么关系,就是单独使用log4j了. (虽然后台还有将log4j交由spring容器接管之类的,我们不用关心了.)

第三步: 写log4j的配置文件, 关于log4j如何配置,网上已有很多资料, 这里不细说了.
推荐一个eclipse下用log4e插件. 可以很方便的生成日志语句, 转换System.out等.

log4j.properties文件:
log4j.rootLogger= DEBUG, CONSOLE
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender

#org.apache.log4j.HTMLLayout
#org.apache.log4j.PatternLayout
#org.apache.log4j.SimpleLayout
#org.apache.log4j.TTCCLayout
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%-4r %-5p [%t] %37c %3x - %m%n

#log4j.appender.FILE=org.apache.log4j.DailyRollingFileAppender
#log4j.appender.FILE.layout = org.apache.log4j.PatternLayout
#log4j.appender.FILE.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] - %m%n
#这里的${myProject.root}是在第二步中配置出来的. 也可以写绝对路径
#log4j.appender.FILE.File=${myProject.root}/log/sqmslog.log

#log4j.appender.FILE2 = org.apache.log4j.RollingFileAppender
#log4j.appender.FILE2.MaxFileSize = 500KB

log4j.logger.org.springframework=WARN

log4j.logger.test=DEBUG

第二部分: spring-jdbc 数据库配置.

这里所需jar包为: (关于jndi方面的jar包未测试是否已包含)
org.springframework.asm-3.0.5.RELEASE.jar
org.springframework.beans-3.0.5.RELEASE.jar
org.springframework.context-3.0.5.RELEASE.jar
org.springframework.core-3.0.5.RELEASE.jar
org.springframework.expression-3.0.5.RELEASE.jar
org.springframework.jdbc-3.0.5.RELEASE.jar
org.springframework.transaction-3.0.5.RELEASE.jar
org.springframework.web-3.0.5.RELEASE.jar
commons-logging-1.1.1.jar
commons-dbcp-1.3.jar
commons.pool-1.5.3.jar
当然,还有你要用的数据库的jdbc驱动包. 比如我这里用Mysql的mysql-connector-java-5.1.5-bin.jar

第二步:
这里使用的是将数据库信息写在文件jdbc.properties里, 你也可以将信息直接写在dataSource的bean属性里(将第一个bean去掉),
编辑spring的配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> 
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations" value="/WEB-INF/conf/jdbc.properties"/>
</bean>

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>

<bean id="TestBo"
class="test.TestBo">
<property name="dataSource" ref="dataSource"  />
</bean>
<!-- 省略其他 -->
</beans>


jdbc.properties文件 :
jdbc.driverClassName=org.gjt.mm.mysql.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/mysqldb?useUnicode=true
jdbc.username=root
jdbc.password=

第三步:测试, 还是使用在上一节中的测试类, TestBo
public class TestBo {

private JdbcTemplate jdbcTemplate;

public void setDataSource(DataSource dataSource) {
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
}


这样就通过spring注入的dataSource在类中获得了JdbcTemplate, 这个对象基本就能帮你完成事务之外的各种数据库操作.具体操作方法这里不详述了,列出几个官方文档中给出的例子.
//queryForInt
int countOfActorsNamedJoe = this.jdbcTemplate.queryForInt(
"select count(*) from t_actor where first_name = ?", "Joe");

//queryForString
String lastName = this.jdbcTemplate.queryForObject(
"select last_name from t_actor where id = ?",
new Object[]{1212L}, String.class);

// queryForObject
Actor actor = this.jdbcTemplate.queryForObject(
"select first_name, last_name from t_actor where id = ?",
new Object[]{1212L},
new RowMapper<Actor>() {
public Actor mapRow(ResultSet rs, int rowNum) throws SQLException {
Actor actor = new Actor();
actor.setFirstName(rs.getString("first_name"));
actor.setLastName(rs.getString("last_name"));
return actor;
}
});

//queryForObjectList
List<Actor> actors = this.jdbcTemplate.query(
"select first_name, last_name from t_actor",
new RowMapper<Actor>() {
public Actor mapRow(ResultSet rs, int rowNum) throws SQLException {
Actor actor = new Actor();
actor.setFirstName(rs.getString("first_name"));
actor.setLastName(rs.getString("last_name"));
return actor;
}
});

//another queryForObjectList
public List<Actor> findAllActors() {
return this.jdbcTemplate.query( "select first_name, last_name from t_actor", new ActorMapper());
}
private static final class ActorMapper implements RowMapper<Actor> {
public Actor mapRow(ResultSet rs, int rowNum) throws SQLException {
Actor actor = new Actor();
actor.setFirstName(rs.getString("first_name"));
actor.setLastName(rs.getString("last_name"));
return actor;
}
}

//update and delete
this.jdbcTemplate.update(
"update t_actor set = ? where id = ?",
"Banjo", 5276L);
)


最后附上jndi的配置xml, 可能需要引入更多的jar包.

<?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:jee="http://www.springframework.org/schema/jee"
xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.0.xsd">

<jee:jndi-lookup id="dataSource" jndi-name="jdbc/jpetstore"/>
<bean id="txManager" class="org.springframework.transaction.jta.JtaTransactionManager" />
<!-- other <bean/> definitions here -->
</beans>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: