Spring配置文件
spring配置文件各个属性详解

spring配置文件各个属性详解分类:spring 2012-08-09 11:25 9316人阅读评论(2) 收藏举报springaophibernateattributesxhtmlwebsphere目录(?)[+]一、引用外部属性文件<bean id="propertyConfigurer"class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"><property name="locations"><list><value>classpath:mail.properties</value><value>classpath:jdbc.properties</value></list></property></bean>我们定义了一个PropertyPlaceholderConfigurer类的实例,并将其位置属性设置为我们的属性文件。
该类被实现为Bean工厂的后处理器,并将使用定义在文件中的属性来代替所有的占位符(${...}value)。
注意:而在spring2.5的版本中提供了一种更简便的方式,如:1.<context:property-placeholderlocation="classpath:config/jdbc.properties"/>这样以后要使用属性文件中的资源时,可以使用${属性名}来获得。
二、常用数据源的配置第一种是:DBCP数据源,(需要加入2个jar文件,在spring中的lib下jakarta-commons/commons-dbcp.jar和commons-pools.jar)主要配置如下:<!-- Mysql版--><bean id="dataSource"class="mons.dbcp.BasicDataSource"><property name="driverClassName"value="com.mysql.jdbc.Driver"></property><property name="url"value="${jdbc.url}"></property><property name="username" value="${ername}"></property><property name="password" value="${jdbc.password}"></property></bean>第二种是:c3p0数据源,跟第一种一个类型,需加入c3p0.jar包。
Spring配置定时器(注解+xml)方式—整理

Spring配置定时器(注解+xml)⽅式—整理⼀、注解⽅式1. 在Spring的配置⽂件ApplicationContext.xml,⾸先添加命名空间1 xmlns:task="/schema/task"2 /schema/task3 /schema /task/springtask3.1.xsd42. 最后是我们的task任务扫描注解1<task:annotation-driven/>3. spring扫描位置1<context:annotation-config/>2<context:component-scan base-package="com.test"/>4.写⾃⼰的定时任务1 @Component //import ponent;2public class MyTestServiceImpl implements IMyTestService {3 @Scheduled(cron="0/5 * * * * ? ") //每5秒执⾏⼀次4public void myTest(){5 System.out.println("进⼊测试");6 }7 }♦注意:定时器的任务⽅法不能有返回值(如果有返回值,spring初始化的时候会告诉你有个错误、需要设定⼀个proxytargetclass的某个值为true)⼆、XML⽅式1.在spring配置⽂件中创建bean,创建schedule1<bean id="schedule"class="org.springframework.scheduling.quartz.SchedulerFactoryBean">3<property name="triggers">4<list>5<ref bean="testTrigger"/>6</list>7</property>8</bean>2. 在spring配置⽂件中创建bean,创建你的triggers1<bean id="testTrigger"class="org.springframework.scheduling.quartz.CronTriggerBean">3<property name="jobDetail" ref="testJobDetail"/>4<property name="cronExpression" value="0 1/5 * * * ?"/>5</bean>3. 在spring配置⽂件中创建bean,指定定时器作⽤在那个类那个⽅法上⾯1<bean id="testJobDetail"class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">3<property name="targetObject" ref="targetTestService"/>4<property name="targetMethod" value="timerTest"/>5</bean>♦注明:把定时器作⽤在targetTestService对象中的timerTest⽅法上⾯4. 当然还得把你作⽤的对象交Spring来管理,所以在spring配置⽂件中创建作⽤类的 bean1<bean id="targetTestService" class=".service.TargetTestService" scope="prototype"></bean>♦这是时间的设置规则org.springframework.scheduling.quartz.CronTriggerBean允许你更精确地控制任务的运⾏时间,只需要设置其cronExpression属性。
spring文档

spring是一个开源的控制反转(inversion of control)和面向切面(AOP)的容器框架,她主要设计目标是简化开发。
如:public class UserService {private UserDAO userDAO = new UserDAO();public void addUser(User user) {userDAO.add(user);}}userDAO是在应用内部创建和维护,控制反转是应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护由外部容器负责,这种控制权由应用转移到外部容器就称为反转。
当把这种控制权力交给外部容器处理之后代码可以改为public class UserService {private UserDAO userDAO;public void addUser(User user) {userDAO.add(user);}}针对这个属性可以提供构造方法中传递参数或者提供setter方法进行注入。
依赖注入(Dependency Injection):由容器动态地将依赖对象注入到组件中。
Spring带来的好处1、降低组件之间的耦合度,实现软件各层之间的解耦。
Action →service →DAO2、可以使用容器提供相关服务,如:事务管理服务等,使用spring管理服务之后不再需要手工控制事务。
(hibernate或者是jdbc的事务相关操作代码都可以去掉)Spring的声明式事务管理可以实现复杂的事务操作。
3、容器提供单例模式,开发人员不再编写单例代码。
4、容器提供AOP技术,利用它很容易实现权限拦截、监控、日志等功能。
5、容器提供很多辅助类,利用这些类能够加快应用的开发,如:JdbcTemplate、HibernateTemplate等6、spring对于一些主流的框架提供了集成支持,如hibernate、struts、ibatis等搭建spring开发环境使用spring需要的jar在官网上下载spring的安装包dist\spring.jarlib\jakarta-commons\commons-logging.jar如果使用aop还需要Lib\aspectj\aspectjweaver.jar、aspectjrt.jarLib\cglib\cglib-nodep-2.1.3.jar如果使用JSR-250中的注解还需要使用lib\j2ee\common-annotations.jarspring配置文件,规范参考文档手册实例化spring容器方法一、在类路径下寻找配置文件来实例化容器ApplicationContext ctx = new ClassPathXmlApplicationContext(new String[]{“beans.xml”,”user.xml”});方法二、在文件系统路径下需找配置文件来实例化容器ApplicationContext ctx = new FileSystemXmlApplicationContext(new String[]{“c:\\beans.xml”}); 注意:spring配置文件可以有多个,这时通过string数组传入。
Spring中加载xml配置文件的几种方式

项目中一个需求就是所有的功能都是插件的形式装入系统,这就需要利用Spring去动态加载某一位置下的配置文件,就总结了下Spring中加载xml配置文件的方式, xml是最常见的spring 应用系统配置源。
Spring中的几种容器都支持使用xml装配bean,包括:XmlBeanFactory,ClassPathXmlApplicationContext,FileSystemXmlApplicationContext,XmlWebApplicationContext,.....一: XmlBeanFactory 引用资源1.Resource cr = new ClassPathResource("applicationContext.xml");BeanFactory bf=new XmlBeanFactory(cr);UserDao userDao = (UserDao)bf.getBean("userDao");二: ClassPathXmlApplicationContext 编译路径使用ClassPathXmlApplicationContext对象获取,必须把applicationContext.xml放置到类的加载路径中,也就是Src下面1.ApplicationContext factory=new ClassPathXmlApplicationContext("classpath:appcontext.xml");// src目录下的2.ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); UserDao userDao = (UserDao)context.getBean("userDao");3.ApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"applicationContext-oracle.xml","applicationContext.xml"});UserDao userDao = (UserDao)context.getBean("userDao");// src/conf 目录下的4.ApplicationContext factory=new ClassPathXmlApplicationContext("conf/appcontext.xml");5.ApplicationContext factory=new ClassPathXmlApplicationContext("file:G:/Test/src/appcontext.xml");三: FileSystemXmlApplicationContext用文件系统的路径必须把applicationContext.xml放置到工程目录下面,也就是项目路径的下面1.ApplicationContext factory=newFileSystemXmlApplicationContext("src/appcontext.xml");//使用了classpath: 前缀,作为标志, 这样,FileSystemXmlApplicationContext 也能够读入classpath下的相对路径没有classpath的话就是从当前的工作目录2.ApplicationContext factory=newFileSystemXmlApplicationContext("classpath:appcontext.xml");3.ApplicationContext factory=newFileSystemXmlApplicationContext("file:G:/Test/src/appcontext.xml");4.ApplicationContext factory=newFileSystemXmlApplicationContext("G:/Test/src/appcontext.xml");四: XmlWebApplicationContext是专为Web工程定制的。
实验一Spring环境配置

<beansxmlns="/schema/beans"
xmlns:xsi="/2001/XMLSchema-instance"
xsi:schemaLocation="/schema/beans
传统J2EE应用的开发效率低,应用服务器厂商对各种技术的支持并没有真正统一,导致J2EE的应用没有真正实现Write Once及Run Anywhere的承诺。Spring作为开源的中间件,独立于各种应用服务器,甚至无须应用服务器的支持,也能提供应用服务器的功能,如声明式事务、事务处理等。
Spring致力于J2EE应用的各层的解决方案,而不是仅仅专注于某一层的方案。可以说Spring是企业应用开发的“一站式”选择,并贯穿表现层、业务层及持久层。然而,Spring并不想取代那些已有的框架,而是与它们无缝地整合。
}
publicvoidrecharge(){
System.out.println("您好"+user.getAccount()+"用户,你的账户充值成功!");
System.out.println("充值金额为:"+user.getMoney());
}
publicvoidread(){
try(BufferedReader reader =newBufferedReader(
(三)Spring由哪些模块组成?它们分别有些什么作用?
Spring 框架是一个分层架构,由 7 个定义良好的模块组成。Spring模块构建在核心容器之上,核心容器定义了创建、配置和管理 bean 的方式,如图所示:
spring注解注入properties配置文件

spring注解注⼊properties配置⽂件早期,如果需要通过spring读取properties⽂件中的配置信息,都需要在XML⽂件中配置⽂件读取⽅式。
基于XML的读取⽅式:1<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">2<property name="locations">3<list>4<value>classpath:properties/thread-pool.properties</value>5</list>6</property>7</bean>当然,这种⽅式可以统⼀管理properties配置⽂件,也能实现代码的松耦合。
但为了⽅便开发,提⾼开发效率,spring官⽅后来提供了基于注解的配置读取⽅式。
两种⽅式各有优势,可以基于对项⽬的考虑选择最合适的⽅式。
接下来就介绍如何通过注解注⼊properties的配置信息。
⾸先,准备配置⽂件:1 core.pool.size=22 max.pool.size=33 keep.alive.time=14 task.queue.size=35 await.termination.time=5定义配置类:1package org.cellphone.config;23import com.google.gson.Gson;4import org.springframework.beans.factory.annotation.Value;5import org.springframework.context.annotation.Bean;6import org.springframework.context.annotation.PropertySource;7import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;8import ponent;910/**11 *12*/13 @Component14 @PropertySource("classpath:properties/thread-pool.properties")15public class ThreadPoolConfig {16/**17 * 核⼼线程个数18*/19 @Value("${core.pool.size}")20private int corePoolSize;21/**22 * 最⼤线程个数23*/24 @Value("${max.pool.size}")25private int maxPoolSize;26/**27 * 保持⼼跳时间28*/29 @Value("${keep.alive.time}")30private int keeAliveTime;31/**32 * 任务队列长度33*/34 @Value("${task.queue.size}")35private int taskQueueSize;36/**37 * 等待任务结束的时间38*/39 @Value("${await.termination.time}")40private int awaitTerminationTime;4142/**43 * 使⽤@value注解注⼊properties中的属性44 * 1. 在类名上⾯使⽤ @PropertySource("classpath:*") 注解,*代表属性⽂件路径,可以指向多个配置⽂件路径45 * 如果是多个配置⽂件,则是 @PropertySource({"classpath:*","classpath:*"....})46 * 2. 在字段上直接使⽤@value注解47 * 3. 注解内使⽤${core.pool.size} core.pool.size 代表属性⽂件⾥⾯的key48 * 5. 需要新增 PropertySourcesPlaceholderConfigurer 的 bean49 * 6. 在 PropertySourcesPlaceholderConfigurer 增加@bean注解,申明返回的是⼀个bean,否则会注⼊失败50 *51*/525355 @Bean56public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {57return new PropertySourcesPlaceholderConfigurer();58 }5960public int getCorePoolSize() {61return corePoolSize;62 }6364public void setCorePoolSize(int corePoolSize) {65this.corePoolSize = corePoolSize;66 }6768public int getMaxPoolSize() {69return maxPoolSize;70 }7172public void setMaxPoolSize(int maxPoolSize) {73this.maxPoolSize = maxPoolSize;74 }7576public int getKeeAliveTime() {77return keeAliveTime;78 }7980public void setKeeAliveTime(int keeAliveTime) {81this.keeAliveTime = keeAliveTime;82 }8384public int getTaskQueueSize() {85return taskQueueSize;86 }8788public void setTaskQueueSize(int taskQueueSize) {89this.taskQueueSize = taskQueueSize;90 }9192public int getAwaitTerminationTime() {93return awaitTerminationTime;94 }9596public void setAwaitTerminationTime(int awaitTerminationTime) {97this.awaitTerminationTime = awaitTerminationTime;98 }99100 @Override101public String toString() {102return new Gson().toJson(this);103 }104 }这⾥注⼊了⼀个 PropertySourcesPlaceholderConfigurer bean,spring是通过 PropertySourcesPlaceholderConfigurer 的 locations 来查找属性⽂件,然后再根据注解将匹配的属性set进去,下⾯通过源码来了解注解可以进⾏⼀些什么操作。
spring.factories配置文件的工厂模式

spring.factories配置⽂件的⼯⼚模式在springboot的各个依赖包下,我们经常看到META-INF/spring.factories这个⽂件。
spring.factories⽂件的内容基本上都是这样的格式:1 # Initializers2 org.springframework.context.ApplicationContextInitializer=\3 org.springframework.boot.autoconfigure.SharedMetadataReaderFactoryContextInitializer,\4 org.springframework.boot.autoconfigure.logging.ConditionEvaluationReportLoggingListener我们看到,这个⽂件配置了⼀个key:value格式的数据1)key是:org.springframework.context.ApplicationContextInitializer2)value是:org.springframework.context.boot.autoconfigure.SharedMetadataReaderFactoryContextInitializer,org.springframework.context.boot.autoconfigure.logging.ConditionEvaluationReportLoggingListener key声明的是⼀个接⼝,value则是这个接⼝对应的实现类,如果有多个则以","符号分割。
简单来说,spring.factories⽂件包含了⼀些接⼝相对应的实现类的配置,我们通过这些配置就可以知道接⼝有哪些可选的实现类,并通过反射获取对应的实例对象。
就像是简单⼯⼚模式⼀样,也因此spring将这个⽂件定义为spring.factories这个名字。
springlog4j2.xml配置文件详解

springlog4j2.xml配置⽂件详解⼀、log4j2介绍 log4j 2.x版本不再⽀持像1.x中的.properties后缀的⽂件配置⽅式,2.x版本配置⽂件后缀名只能为".xml",".json"或者".jsn"。
配置⽂件的格式:log2j配置⽂件可以是xml格式的,也可以是json格式的。
配置⽂件的位置:log4j2默认会在classpath⽬录下寻找log4j2.xml、log4j.json、log4j.jsn等名称的⽂件。
系统选择配置⽂件的优先级(从先到后)如下: (1).classpath下的名为log4j2-test.json 或者log4j2-test.jsn的⽂件. (2).classpath下的名为log4j2-test.xml的⽂件. (3).classpath下名为log4j2.json 或者log4j2.jsn的⽂件. (4).classpath下名为log4j2.xml的⽂件. 我们⼀般默认使⽤log4j2.xml进⾏命名。
⼆、配置⽂件节点解析 (1).根节点Configuration有两个属性:status和monitorinterval,有两个⼦节点:Appenders和Loggers(表明可以定义多个Appender和Logger)。
status⽤来指定log4j本⾝的打印⽇志的级别。
monitorinterval⽤于指定log4j⾃动重新配置的监测间隔时间,单位是s,最⼩是5s。
(2).Appenders节点,常见的有三种⼦节点:Console、RollingFile、File。
Console节点⽤来定义输出到控制台的Appender。
name:指定Appender的名字. target:SYSTEM_OUT 或 SYSTEM_ERR,⼀般只设置默认:SYSTEM_OUT。
PatternLayout:输出格式,不设置默认为:%m%n。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Spring 配置文件命名空间
1.xml文档的命名空间
XML文档可以创建自定义的元素和属性来描述数据,这样就很容易产生名称相同而含义不同的元素。
XML使用命名空间来加以区分。
命名空间使用统一资源定位符URI来识别。
URI必须是XML文档中唯一的。
1.1 XML文档中加入命名空间
为了引用一个命名空间,可以将其以属性的形式加入任何包含了属于该命名空间中元素的节点中。
比如:
这决定了命名空间wq指向/ns/furniture
1.2 添加默认命名空间
/ Copyright©2010吴青版权所有
一个XML文档大部分通常属于一个XML词汇。
在这种情况下,可以定义一个默认的命名空间,而不是为每一个元素重复地添加命名空间前缀。
可以使用xmlns关键字来定义默认的命名空间。
这样,就不用为默认的命名空间内的元素指定前缀了。
2.XML的约束模式
XML的约束模式定义了XML文档中允许出现的元素名,元素中的属性,内容类型,以及元素之间的嵌套关系和出现顺序。
如果把一个XML文件看做数据库中的一个表,那么XML约束模式就相当于数据库表结构的定义。
约束模式通常都是在一个单独的文件中进行定义,这个文件被称为模式文档。
模式文档采用某种约束模式语言编写,用于描述XML文档的结构。
模式语言应用最广泛的就是XML DTD和XML Schema。
Spring的配置文件中这两种模式浴盐都支持
/ Copyright©2010吴青版权所有
一个XML文档想说明自己是一个有效的XML文档,除了要严格遵循某个DTD文件定义的规则外,还必须指明其所遵循的是那个DTD文件,以便解析器程序能够对它进行有效性校验。
如何把XML文件和一个DTD文件联系起来?正如上面的代码:XML文档通过使用DOCTYPE声明语句(文档类型定义语句)来指明它所遵循的DTD文件。
DOCTYPE 声明语句紧跟在XML文档声明语句后面,有两种格式:
<!DOCTYPE 文档类型名称SYSTEM “DTD文件的URL”>
<!DOCTYPE 文档类型名称PUBLIC “DTD名称” ”DTD文件的URL”>
文档类型名称一般使用XML文件的根元素名称来作为文档类型名称。
SYSTEM:表明xml文件所遵循的是一个本地或者组织内部所编写和使用DTD文件
/ Copyright©2010吴青版权所有
PUBLIC:表明XML文件所遵循的是一个由权威机构制定的,公开提供给特定行业或者公众使用的DTD文件,而不是某个组织内部的规范文件
DTD名称:用于制定该DTD文件的标识名称(key),它映射到实际的 .dtd文件。
它只在使用关键字PUBLIC的DOCTYPE声明语句中出现。
DTD标识名称需要用双引号(”)括起来,如上面的:"-//SPRING//DTD BEAN 2.0//EN"
DTD文件URL:指定DTD文件所在的位置,也需要使用双引号(”)括起来。
如上面的: /dtd/spring-beans-2.0.dtd .
2.2 XML Schema
如同DTD一样,XML Schema也是一种用于定义和描述XML文档结构与内容的模式语言,其出现的目的是为了克服DTD的局限性,比如XML DTD并不能很好的实现应用程序的不同模块之间的相互协调,缺乏对文件结构,属性,数据类型等约束的足够描述等,并为XML文档提供了更加丰富的语法结构。
下面是Spring配置文档中将XML Schema 应用到xml文档的例子:
/ Copyright©2010吴青版权所有
/ Copyright©2010吴青版权所有
如果应用程序想要使用某个XML Schema 文档来校验一个XML 实例文档时,它首先必须获得该XML Schema 文档的内容信息。
声明XML 实例文档遵循某个XML Schema 文档的方式之一就是使用命名空间。
下面分别来解释:
① : 定义当前文档的默认的命名空间。
②:定义命名空间 xsi,这个命名空间是w3c 定义的。
为什么要在这里定义这个命名空
间呢?可以看到在③中我们使用了 一个属性 schemaLocation ,而这个属性正好是
/2001/XMLSchema-instance 定义的。
所以要想使用这个属性,就得引
入它所在的命名空间。
③: schemaLocation 属性的作用就是用于指定名称空间所对应的XMLSchema
模式文档在哪里,这个属性在前面定义的xsi 名称空间中,所以必须在其前面加上表示其名
称空间的前缀。
设置值包含两部分: 第一部分就是命名空间的URI,上面的是/schema/beans,第二部分就是该名称空间所标识的XML Schema文件的位置或者URL地址,这两个部分之间使用空格分隔.④标识的就是这一部分的内容
2.3 引入多个名称空间的名称。
一个XML实例文档可能引用多个名称空间的名称,对于这种情况,schemaLocation 属性的设置值中可以包含多对名称空间与他们所对应的XML Schema文档的存储位置,每一对名称空间的设置信息至今啊也采用空格分隔。
比如我们要在spring中做AOP的相关配置。
这就要引入对应的名称空间:
/ Copyright©2010吴青版权所有
与前面不一样的地方我将它标识出来了。
①名称空间的名字为aop,要想使用该名称空间中的元素,就必须添加前缀了,比如: <aop: config />. 引入了这个名称空间之后,还要指定这个名称空间的XML Schema 约束文件,②是该名称空间,③是对应的xsd文件
:
下面是Spring Security 3.0 命名空间的配置
/ Copyright©2010吴青版权所有。