spring配置文件详解
1.基本配置:<?xml version="1.0"encoding="UTF-8"?><beansxmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:context="/schema/context"xsi:schemaLocation="/schema/bea ns/schema/beans/spring-beans-2.5.xsd/schema/context/schema/context/spring-context-2.5.xsd"><context:component-scan base-package="com.persia"><!--开启组件扫描--></context:component-scan><context:annotation-config><!--开启注解处理器--></context:annotation-config><!--使用注解,省去了propertity的xml配置,减少xml文件大小--><bean id="personServiceAnno"class="com.persia.PersonServiceAnnotation"></bean><bean id="personDaoBeanAnno"class="com.persia.PersonDaoBean"></bean> <bean id="personDaoBeanAnno2"class="com.persia.PersonDaoBean"></bean><!--自动注解--><bean id="personServiceAutoInject"class="com.persia.PersonServiceAutoInject"autowire="byName"></bean><bean id="personService"class="com.persia.PersonServiceBean"><!--由spring容器去创建和维护,我们只要获取就可以了--></bean><bean id="personService2"class="com.persia.PersonServiceBeanFactory" factory-method="createInstance"lazy-init="true"init-method="init"destroy-method="destory"><!--静态工厂获取bean--></bean><bean id="fac"class="com.persia.PersonServiceBeanInsFactory"></bean> <bean id="personService3"factory-bean="fac"factory-method="createInstance"scope="prototype"><!--实例工厂获取bean,先实例化工厂再实例化bean--></bean><!--ref方式注入属性--><bean id="personDao"class="com.persia.PersonDaoBean"></bean><bean id="personService4"class="com.persia.PersonServiceBean"><property name="personDao"ref="personDao"></property></bean><!--内部bean方式注入--><bean id="personService5"class="com.persia.PersonServiceBean"><property name="personDao"><bean class="com.persia.PersonDaoBean"></bean></property><property name="name"value="persia"></property><property name="age"value="21"></property><property name="sets"><!--集合的注入--><set><value>第一个</value><value>第二个</value><value>第三个</value></set></property><property name="lists"><!--集合的注入--><list><value>第一个l</value><value>第二个l</value><value>第三个l</value></list></property><property name="properties"><props><prop key="key1">value1</prop><prop key="key2">value2</prop><prop key="key3">value3</prop></props></property><property name="map"><map><entry key="key1"value="value-1"></entry><entry key="key2"value="value-2"></entry><entry key="key3"value="value-3"></entry></map></property></bean><bean id="personService6"class="com.persia.PersonServiceBean"><constructor-arg index="0"value="构造注入的name"></constructor-arg><!--基本类型可以不写type--><constructor-arg index="1"type="com.persia.IDaoBean"ref="personDao"></constructor-arg></bean></beans>2.开启AOP:<?xml version="1.0"encoding="UTF-8"?><beansxmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:context="/schema/context"xmlns:aop="/schema/aop"xsi:schemaLocation="/schema/bea ns/schema/beans/spring-beans-2.5.xsd/schema/aop/schema/aop/spring-aop-2.5.xsd/schema/context/schema/context/spring-context-2.5.xsd"><aop:aspectj-autoproxy></aop:aspectj-autoproxy><bean id="myInterceptor"class="com.persia.service.MyInterceptor"></bean><bean id="personServiceImpl"class="com.persia.service.impl.PersonServiceImpl"></bean></beans>AOP的xml版本<?xml version="1.0"encoding="UTF-8"?><beansxmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:context="/schema/context"xmlns:aop="/schema/aop"xsi:schemaLocation="/schema/bea ns/schema/beans/spring-beans-2.5.xsd/schema/aop/schema/aop/spring-aop-2.5.xsd/schema/context/schema/context/spring-context-2.5.xsd"><aop:aspectj-autoproxy></aop:aspectj-autoproxy><bean id="personService"class="com.persia.service.impl.PersonServiceImpl"></bean><bean id="aspectBean"class="com.persia.service.MyInterceptor"></bean><aop:config><aop:aspect id="myaop"ref="aspectBean"><aop:pointcut id="mycut"expression="execution(*com.persia.service.impl.PersonServiceImpl.*(..))"/><aop:pointcut id="argcut"expression="execution(*com.persia.service.impl.PersonServiceImpl.*(..))and args(name)"/><aop:before pointcut-ref="mycut"method="doAccessCheck"/><aop:after-returning pointcut-ref="mycut"method="doAfterReturning"/><aop:after-throwing pointcut-ref="mycut"method="doThrowing"/> <aop:after pointcut-ref="argcut"method="doAfter"arg-names="name"/><aop:around pointcut-ref="mycut"method="arround"/></aop:aspect></aop:config></beans>3.开启事务和注解:<?xml version="1.0"encoding="UTF-8"?><beansxmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:context="/schema/context"xmlns:aop="/schema/aop"xmlns:tx="/schema/tx"xsi:schemaLocation="/schema/bea ns/schema/beans/spring-beans-2.5.xsd/schema/context/schema/context/spring-context-2.5.xsd/schema/aop/schema/aop/spring-aop-2.5.xsd/schema/tx /schema/tx/spring-tx-2.5.xsd"><aop:aspectj-autoproxy></aop:aspectj-autoproxy><!--配置数据源--><bean id="dataSource"class="mons.dbcp.BasicDataSource"destroy-method="close"><property name="driverClassName"value="com.mysql.jdbc.Driver"/> <property name="url"value="jdbc:mysql://localhost:3306/test?useUnicode=true&character Encoding=utf-8"/><property name="username"value="root"/><property name="password"value=""/><!--连接池启动时的初始值--><property name="initialSize"value="1"/><!--连接池的最大值--><property name="maxActive"value="500"/><!--最大空闲值.当经过一个高峰时间后,连接池可以慢慢将已经用不到的连接慢慢释放一部分,一直减少到maxIdle为止--><property name="maxIdle"value="2"/><!--最小空闲值.当空闲的连接数少于阀值时,连接池就会预申请去一些连接,以免洪峰来时来不及申请--><property name="minIdle"value="1"/></bean><!--配置事务管理器--><bean id="txManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManag er"><property name="dataSource"ref="dataSource"/></bean><!--配置业务bean--><bean id="personService"class="com.persia.service.impl.PersonServiceImpl"><property name="ds"ref="dataSource"></property></bean><!--采用@Transactional注解方式来使用事务--><tx:annotation-driven transaction-manager="txManager"/></beans>XML版本:<?xml version="1.0"encoding="UTF-8"?><beansxmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:context="/schema/context"xmlns:aop="/schema/aop"xmlns:tx="/schema/tx"xsi:schemaLocation="/schema/bea ns/schema/beans/spring-beans-2.5.xsd/schema/context/schema/context/spring-context-2.5.xsd/schema/aop/schema/aop/spring-aop-2.5.xsd/schema/tx /schema/tx/spring-tx-2.5.xsd"><aop:aspectj-autoproxy></aop:aspectj-autoproxy><!--配置数据源--><bean id="dataSource"class="mons.dbcp.BasicDataSource"destroy-method="close"><property name="driverClassName"value="com.mysql.jdbc.Driver"/><property name="url"value="jdbc:mysql://localhost:3306/test?useUnicode=true&character Encoding=utf-8"/><property name="username"value="root"/><property name="password"value=""/><!--连接池启动时的初始值--><property name="initialSize"value="1"/><!--连接池的最大值--><property name="maxActive"value="500"/><!--最大空闲值.当经过一个高峰时间后,连接池可以慢慢将已经用不到的连接慢慢释放一部分,一直减少到maxIdle为止--><property name="maxIdle"value="2"/><!--最小空闲值.当空闲的连接数少于阀值时,连接池就会预申请去一些连接,以免洪峰来时来不及申请--><property name="minIdle"value="1"/></bean><!--配置事务管理器--><bean id="txManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManag er"><property name="dataSource"ref="dataSource"/></bean><!--配置业务bean--><bean id="personService"class="com.persia.service.impl.PersonServiceImpl"><property name="ds"ref="dataSource"></property></bean><!--使用XML来使用事务管理--><aop:config><!--配置一个切面,和需要拦截的类和方法--><aop:pointcut id="transactionPointcut"expression="execution(* com.persia.service..*.*(..))"/><aop:advisor advice-ref="txAdvice"pointcut-ref="transactionPointcut"/></aop:config><!--配置一个事务通知--><tx:advice id="txAdvice"transaction-manager="txManager"><tx:attributes><!--方法以get开头的,不使用事务--><tx:method name="get*"read-only="true"propagation="NOT_SUPPORTED"/><!--其他方法以默认事务进行--><tx:method name="*"/></tx:attributes></tx:advice></beans>4.SSH:<?xml version="1.0"encoding="UTF-8"?><beansxmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:context="/schema/context"xmlns:aop="/schema/aop"xmlns:tx="/schema/tx"xsi:schemaLocation="/schema/bea ns/schema/beans/spring-beans-2.5.xsd/schema/context/schema/context/spring-context-2.5.xsd/schema/aop/schema/aop/spring-aop-2.5.xsd/schema/tx /schema/tx/spring-tx-2.5.xsd"><!--配置数据源--><bean id="dataSource"class="mons.dbcp.BasicDataSource"destroy-method="close"><property name="driverClassName"value="com.mysql.jdbc.Driver"/> <property name="url"value="jdbc:mysql://localhost:3306/test?useUnicode=true&character Encoding=utf-8"/><property name="username"value="root"/><property name="password"value=""/><!--连接池启动时的初始值--><property name="initialSize"value="1"/><!--连接池的最大值--><property name="maxActive"value="500"/><!--最大空闲值.当经过一个高峰时间后,连接池可以慢慢将已经用不到的连接慢慢释放一部分,一直减少到maxIdle为止--><property name="maxIdle"value="2"/><!--最小空闲值.当空闲的连接数少于阀值时,连接池就会预申请去一些连接,以免洪峰来时来不及申请--><property name="minIdle"value="1"/></bean><!--配置hibernate的sessionFactory--><bean id="sessionFactory"class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource"><ref bean="dataSource"/></property><property name="mappingResources"><list><value>com/persia/model/Person.hbm.xml</value></list></property><!--1.首先在sessionFactory里面配置以上3条设置--> <!--2.然后得在类路径下面添加一个ehcache.xml的缓存配置文件--><!--3.最后在要使用缓存的实体bean的映射文件里面配置缓存设置--><!--使用二级缓存--><!--不使用查询缓存,因为命中率不是很高--><!--使用Ehcache缓存产品--><property name="hibernateProperties"><value>hibernate.dialect=org.hibernate.dialect.MySQL5Dialecthibernate.hbm2ddl.auto=updatehibernate.show_sql=falsehibernate.format_sql=falsee_second_level_cache=truee_query_cache=falsehibernate.cache.provider_class=org.hibernate.cache.EhCacheProvider</value></property></bean><!--配置Spring针对hibernate的事务管理器--><bean id="txManager"class="org.springframework.orm.hibernate3.HibernateTransactionManager "><property name="sessionFactory"ref="sessionFactory"/></bean><!--配置使用注解的方式来使用事务--><tx:annotation-driven transaction-manager="txManager"/><!--使用手工配置的注解方式来注入bean--><context:annotation-config></context:annotation-config><!--定义要注入的业务bean--><bean id="personService"class="com.persia.service.impl.PersonServiceImpl"></bean><!--将Struts的action交给Spring容器来管理--><bean name="/person/list"class="com.persia.struts.PersonListAction"> <!--1.这里要求name和struts-config里面的action的path名称一致,因为id不允许有特殊字符--><!--2.还得在Struts-config文件里面添加Spring的请求处理器,该处理器会根据action的path属性到Spring容器里面寻找这个bean,若找到了则用这个bean来处理用户的请求--><!--3.然后去掉action的type标签和值(可选),当Spring处理器找不到该bean时,才会使用Struts的action--><!--4.最后在action里面使用Spring的注入方式来注入业务bean--></bean><bean name="/person/manage"class="com.persia.struts.PersonManageAction"></bean></beans>5.SSH2:<?xml version="1.0"encoding="UTF-8"?><beansxmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:context="/schema/context"xmlns:aop="/schema/aop"xmlns:tx="/schema/tx"xsi:schemaLocation="/schema/bea ns/schema/beans/spring-beans-2.5.xsd/schema/context/schema/context/spring-context-2.5.xsd/schema/aop/schema/aop/spring-aop-2.5.xsd/schema/tx /schema/tx/spring-tx-2.5.xsd"><!--配置数据源--><bean id="dataSource"class="mons.dbcp.BasicDataSource"destroy-method="close"><property name="driverClassName"value="com.mysql.jdbc.Driver"/> <property name="url"value="jdbc:mysql://localhost:3306/test?useUnicode=true&character Encoding=utf-8"/><property name="username"value="root"/><property name="password"value=""/><!--连接池启动时的初始值--><property name="initialSize"value="1"/><!--连接池的最大值--><property name="maxActive"value="500"/><!--最大空闲值.当经过一个高峰时间后,连接池可以慢慢将已经用不到的连接慢慢释放一部分,一直减少到maxIdle为止--><property name="maxIdle"value="2"/><!--最小空闲值.当空闲的连接数少于阀值时,连接池就会预申请去一些连接,以免洪峰来时来不及申请--><property name="minIdle"value="1"/></bean><!--配置hibernate的sessionFactory--><bean id="sessionFactory"class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource"><ref bean="dataSource"/></property><property name="mappingResources"><list><value>com/persia/model/Person.hbm.xml</value></list></property><!--1.首先在sessionFactory里面配置以上3条设置--> <!--2.然后得在类路径下面添加一个ehcache.xml的缓存配置文件--><!--3.最后在要使用缓存的实体bean的映射文件里面配置缓存设置--><!--使用二级缓存--><!--不使用查询缓存,因为命中率不是很高--><!--使用Ehcache缓存产品--><property name="hibernateProperties"><value>hibernate.dialect=org.hibernate.dialect.MySQL5Dialecthibernate.hbm2ddl.auto=updatehibernate.show_sql=falsehibernate.format_sql=falsee_second_level_cache=truee_query_cache=falsehibernate.cache.provider_class=org.hibernate.cache.EhCacheProvider</value></property></bean><!--配置Spring针对hibernate的事务管理器--><bean id="txManager"class="org.springframework.orm.hibernate3.HibernateTransactionManager "><property name="sessionFactory"ref="sessionFactory"/></bean><!--配置使用注解的方式来使用事务--><tx:annotation-driven transaction-manager="txManager"/><!--使用手工配置的注解方式来注入bean--><context:annotation-config></context:annotation-config><!--定义要注入的业务bean--><bean id="personService"class="com.persia.service.impl.PersonServiceImpl"></bean><!--注入Struts2的action--><bean id="personList"class="com.persia.struts2.action.PersonListAction"></bean></beans>6.SSJ:<?xml version="1.0"encoding="UTF-8"?><beansxmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:context="/schema/context"xmlns:aop="/schema/aop"xmlns:tx="/schema/tx"xsi:schemaLocation="/schema/bea ns/schema/beans/spring-beans-2.5.xsd/schema/context/schema/context/spring-context-2.5.xsd/schema/aop/schema/aop/spring-aop-2.5.xsd/schema/tx /schema/tx/spring-tx-2.5.xsd"><!--使用手工配置的注解方式来注入bean--><context:annotation-config></context:annotation-config><!--1.配置Spring集成JPA--><bean id="entityManagerFactory"class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean"> <property name="persistenceUnitName"value="SpringJPAPU"/></bean><!--2.配置Spring针对JPA的事务--><bean id="txManager"class="org.springframework.orm.jpa.JpaTransactionManager"><property name="entityManagerFactory"ref="entityManagerFactory"/></bean><!--3.开启事务注解--><tx:annotation-driven transaction-manager="txManager"/><!--以上3个Spring集成JPA的配置,在web项目先添加Spring支持,后添加JPA支持时会自动生成--><!--配置业务bean--><bean id="personService"class="com.persia.service.impl.PersonServiceImpl"></bean><!--配置Struts的action--><bean name="/person/list"class="com.persia.struts.PersonListAction"/><bean name="/person/manage"class="com.persia.struts.PersonManageAction"/></beans>。
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的xml文件详解
Spring的xml⽂件详解spring的xml配置⽂件头:<?xml version="1.0" encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:context="/schema/context"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans-3.0.xsd/schema/context/schema/context/spring-context-3.0.xsd">...<!--中间xml⽂件部分-->.....</beans>⼀直在复制黏贴,但是不知道作⽤是什么,不理解的话常出错。
xmlns和命名空间⾸先,介绍⼀下xmlns的作⽤,如下所⽰,⼀个 xml ⽂档中如果包含如下两种定义不同,但是名称相同的元素, xml 解析器是⽆法解析的,因为它不能确定当你调⽤document.getElementsByTagName("book") 时应该返回哪个元素。
<!-- 这⾥的 table 元素描述的是⼀个表格--><table><tr><td>Apples</td><td>Bananas</td></tr></table><!-- 这⾥的 table 元素描述的是⼀个家居桌⼦--><table><name>African Coffee Table</name><width>80</width><length>120</length></table>这时候可以通过在名称增加前缀解决这个问题<!-- 这⾥的 table 元素描述的是⼀个表格--><h:table> <!--添加了前缀 h --><h:tr><h:td>Apples</h:td><h:td>Bananas</h:td></h:tr></h:table><!-- 这⾥的 table 元素描述的是⼀个表格--><f:table> <!--添加了前缀 f --><f:name>African Coffee Table</f:name><f:width>80</f:width><f:length>120</f:length></f:table>由此,引⼊⼀个概念命名空间,通过增加前缀表⽰不同的那是不同命名空间下的table,从⽽解决了⽭盾,但是不同的⼈都有⾃⼰创建的不同的命名空间来描述同样的东西,不利于xml⽂件信息的解析,⽐如说,同样都是⽔果,可以从颜⾊和⾹味不同⾓度来定义成如下两种形式:<!--按照⽔果⾹味来定义--><perfume:fruit><name>....</name><perfume>.....</perfume></perfume:fruit><!--按照⽔果颜⾊来定义--><color:fruit><name>....</name><color>....</color></color:fruit>为此,w3c(万维⽹联盟)对于⼀些类型,定义了对应的命名空间和这些类型的标准,xml解释器碰到这些类型的时候就会通过这些标准去解析这类型的标签,为了确保命名空间的唯⼀,所以不同的命名空间的通常使⽤URL作为被识别的id,如下例⼦:xmlns:xsi="/2001/XMLSchema-instance"这句话的作⽤是当前引⼊了⼀个叫做xsi的命名空间,xsi可以在接下来要使⽤该命名空间时所使⽤的,如下:<xsi:schemaLocation="...... ......">⽽这个很长的字符串,则是xsi这个名称空间被xml解释器内部所识别的时候所真正使⽤的id,但也本⾝只是被当做⼀个字符串名字去处理,xml解释器根据这个id去获取它对应的标准,从⽽知道这个命名空间定义有什么样的标签(xml解释器⾃带有⼀些通⽤的命名空间的标准),这个字符串虽然看起来是URL,但是和对应的⽹页上的信息没有关系,只是⽤来提供命名空间唯⼀性的作⽤,⽹址有时可以被打开,上⾯会有关于该命名空间的信息。
Spring配置解析之Properties
Spring配置解析之Properties 1.简单⽰例:SpringBoot中的的配置简单属性类⽀持ConfigurationProperties⽅式,看⼀个简单的⽰例。
1 @ConfigurationProperties(prefix = "org.dragonfei.demo")2public class DemoProperties {3private String name;4private String password;5private String test;67public String getName() {8return name;9 }1011public void setName(String name) { = name;13 }1415public String getPassword() {16return password;17 }1819public void setPassword(String password) {20this.password = password;21 }2223public String getTest() {24return test;25 }2627public void setTest(String test) {28this.test = test;29 }3031 @Override32public String toString() {33return "DemoProperties{" +34 "name='" + name + '\'' +35 ", password='" + password + '\'' +36 ", test='" + test + '\'' +37 '}';38 }39 }定义Properties类1 =dragonfei2 org.dragonfei.demo.password=password3 org.dragonfei.demo.test=test添加配置1 @Configuration2 @EnableConfigurationProperties({DemoProperties.class})3public class DemoConfiguration {4 }注⼊Properties1 @RunWith(SpringJUnit4ClassRunner.class)2 @SpringApplicationConfiguration(classes = DemoConfiguration.class)3 @EnableAutoConfiguration4public class DemoPropertiesTest {56 @Autowired7private DemoProperties properties;8 @Test9public void testProperties(){10 System.out.println(properties.toString());11 }12 }简单单元测试1 DemoProperties{name='dragonfei', password='password', test='test'}运⾏单元测试结果DemoProperties神奇的注⼊到Spring容器中了。
Spring配置文件
Spring 配置文件命名空间1.xml文档的命名空间XML文档可以创建自定义的元素和属性来描述数据,这样就很容易产生名称相同而含义不同的元素。
XML使用命名空间来加以区分。
命名空间使用统一资源定位符URI来识别。
URI必须是XML文档中唯一的。
1.1 XML文档中加入命名空间为了引用一个命名空间,可以将其以属性的形式加入任何包含了属于该命名空间中元素的节点中。
比如:这决定了命名空间wq指向/ns/furniture1.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文件的根元素名称来作为文档类型名称。
spring配置文件详解
spring配置文件详解Spring是一个轻量级的开源Java框架,它提供了一种简化Java应用开发的方式。
在Spring框架中,配置文件起着非常重要的作用,它用于配置应用程序中的各种组件和对象。
Spring配置文件通常使用XML格式,但也可以使用注解或Java代码进行配置。
在配置文件中,我们可以定义Bean(对象)、依赖关系、AOP(面向切面编程)等等。
下面将详细介绍Spring配置文件的各个部分。
1. 命名空间和约束在Spring配置文件的开头,我们需要声明命名空间和约束。
命名空间用于引入Spring的命名空间,以便我们可以使用Spring提供的各种功能。
约束用于验证配置文件的正确性。
2. Bean定义在Spring配置文件中,我们可以定义多个Bean。
每个Bean都有一个唯一的ID和一个类名或接口名。
我们可以使用构造函数或工厂方法来创建Bean,并指定Bean的属性值。
3. 依赖注入依赖注入是Spring框架的核心特性之一。
通过依赖注入,我们可以将一个Bean的依赖关系委托给Spring容器来管理。
在配置文件中,我们可以使用<property>元素来设置Bean的属性值,也可以使用<constructor-arg>元素来设置构造函数的参数。
4. 别名和引用在配置文件中,我们可以为Bean定义别名,以便在其他地方使用更简洁的名称来引用Bean。
我们还可以使用<ref>元素来引用其他Bean。
5. 集合和数组Spring配置文件还支持定义集合和数组类型的属性。
我们可以使用<list>、<set>、<map>和<props>元素来定义不同类型的集合。
6. 自动装配自动装配是Spring框架的另一个重要特性。
通过自动装配,Spring容器可以根据Bean之间的依赖关系自动将它们连接起来。
在配置文件中,我们可以使用autowire属性来指定自动装配的方式。
【SpringBoot】二、SpringBoot中配置文件详解
【SpringBoot】二、SpringBoot中配置文件详解2020-04-14 23:09:39SpringBoot使用一个全局的配置文件,配置文件名是固定的,支持两种格式1、两种格式(properties,yml)application.propertiesapplication.propertiesapplication.yml由此可以看出 application.yml 文件格式的内容更为简洁,清晰,目前大部分都是YML 格式,我们主要讲 YML 格式的配置文件注意:1、以空格的缩进来控制层级关系,左对齐的一列数据,属于同一个层级2、、yml 格式:k: v,之间的空格必须有3、k 和 v 对大小写敏感4、k: v,字符串默认不用加上单引号或者双引号2、属性: 值的两种写法# k: v 方式user:name: jaychouage: 35# 行内写法user: {name: jaychou,age: 35}3、数组(List、Set)# 用- 值表示数组中的一个元素page:- page1- page2# 行内写法page: {page1,page2}4、从配置文件中取值1、手动取值ConfigurableApplicationContext context = SpringApplication.run(Applica tion.class, args);context.getEnvironment().getProperty("server.port");2、@Value(“${key}”) 取值@Value("${alipay.oauth.appid}")public String APPID;3、配置文件中${key}引用配置信息user:name: jaychouserver:name: this is ${}5、多个配置文件我们在实际的开发过程中,需要不断调试,测试,上传到云服务器中,数据库配置,redis配置,nginx配置等等,需要在云服务器和本地服务器中来回切换,我们可以创建多个配置文件,在本地开发的时候,切换为本地配置文件,上传云服务器之前切换为云服务器配置文件,这样避免了配置信息修改错误我们只需要在 application.yml 配置文件中配置:spring:# 配置文件,多个用逗号隔开profiles:active: oauth,db-localdb-local,为本地配置文件,本地开发测试用当我们上传云服务器时,只需要将配置信息修改为 db-cloud spring:# 配置文件,多个用逗号隔开profiles:active: oauth,db-cloud如您在阅读中发现不足,欢迎留言!!!。
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。
[转]spring配置文件中classpath路径解析
[转]spring配置⽂件中classpath路径解析
src不是classpath, WEB-INF/classes,lib才是classpath
WEB-INF/ 是资源⽬录, 客户端不能直接访问,
这话是没错,不过现在的IDE编译器在编译时会把src下的⽂件(是⽂件,不是.java)移到WEB-INF/classes下。
不过值得注意的是,spring 配置⽂件⾥这个locations是uri表⽰,也就是说你写的jdbc.properties是当前相对路径,要访问classpath记得要这样写:
<value>classpath:jdbc.properties</value>
⾸先 classpath是指 WEB-INF⽂件夹下的classes⽬录
解释classes含义:
1.存放各种资源配置⽂件 eg.init.properties log4j.properties struts.xml
2.存放模板⽂件 eg.actionerror.ftl
3.存放class⽂件对应的是项⽬开发时的src⽬录编译⽂件
总结:这是⼀个定位资源的⼊⼝
如果你知道开发过程中有这么⼀句话:惯例⼤于配置那么也许你会改变你的想法
对于第⼆个问题
这个涉及的是lib和classes下⽂件访问优先级的问题: lib>classes
对于性能的影响应该不在这个范畴
classpath 和 classpath* 区别:
classpath:只会到你的class路径中查找找⽂件;
classpath*:不仅包含class路径,还包括jar⽂件中(class路径)进⾏查找.。
springboot目录结构、重要配置文件、重要注解的详解
springboot⽬录结构、重要配置⽂件、重要注解的详解前⾯2篇博客已经带着⼤家搭建了springboot项⽬,并编写了持久化接⼝部署到tomcat下访问。
这⾥我们⼀起补充下springboot的基本信息⼀.springboot简单介绍springboot是⽬前流⾏的微服务框架,倡导“约定优于配置”,简化spring项⽬搭建及开发过程。
springboot提供了很多核⼼的功能,⽐如⾃动化配置、starter简化maven配置、内嵌servlet容器、应⽤监控等功能。
稳定的版本后缀带RELEASE。
⼆.⼯程⽬录介绍1./src/main/java:⽬录下放置所有的java⽂件(源代码)2./src/main/resource:存放资源⽂件、如静态资源⽂件、配置⽂件、页⾯⽂件等3./src/main/resource/static:存放静态资源4./src/mian/resource/application.properties:配置⽂件,springboot⽀持.properties和.yml⽂件5./src/main/resources/templates:存放模板⽂件如thymeleaf模板⽂件6./src/test/java:单元测试类java⽂件7./target:放置编译后的.class⽂件、配置⽂件等注意:.properties的⽂件优先级⾼于.yml⽂件。
三.⼊⼝类⼊⼝类的名称是根据项⽬的名称⽣成的,项⽬名称+applicationpackage com.example.demo;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);//应⽤程序开始运⾏的地⽅}}@springbootapplication:是个组合注解,包含@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan,简化项⽬启动。
