Spring配置文件参考



1. Annotation自动扫描

<!-- Spring annotation扫描 -->
<!--<context:component-scan base-package="com.baidu.fbu.fcore.acc" />-->
<context:component-scan base-package="com.baidu.fbu.fcore.accounting.loan" />
<context:component-scan base-package="com.baidu.fbu.fcore.accounting" />
<context:component-scan base-package="com.baidu.fbu.fcore.common" />
<context:component-scan base-package="com.baidu.fbu.fcore.common.daycut" />

使用context:component-scan,则自动包含了对@Autowired等的支持。


2. 包含其他模块的bean

<!-- 账务规则引擎 -->
<bean id="accountingService" class="com.baidu.fbu.fcore.accounting.common.service.AccountingService" />
<bean id="accountingReqHandler" class="com.baidu.fbu.fcore.accounting.common.service.AccountingReqHandler" />
<bean id="accountingEntryGenerator" class="com.baidu.fbu.fcore.accounting.common.service.AccountingEntryGenerator" />
<bean id="accountingRuleEngine" class="com.baidu.fbu.fcore.accounting.common.service.AccountingRuleEngine" init-method="init" />

<!-- UID generator -->
<bean id="disposableWorkerIdAssigner" class="com.baidu.fbu.fcore.common.uid.worker.DisposableWorkerIdAssigner" />
<bean id="cachedUidGenerator" class="com.baidu.fbu.fcore.common.uid.impl.CachedUidGenerator">
   <property name="workerIdAssigner" ref="disposableWorkerIdAssigner" />
</bean>

将其他模块的类注入到本模块中。


3. Import

<!-- Imports -->
<import resource="classpath:META-INF/spring/accg-spring-mybatis.xml" />
<import resource="classpath:META-INF/spring/accg-spring-cache.xml" />
<import resource="classpath:META-INF/spring/accg-spring-jobs.xml" />

注入其他配置文件。


4. AOP

<aop:aspectj-autoproxy />
自动为配置@aspect的bean创建代理。

proxy-target-class属性若此值为true强制使用CGLIB代理。



5. Cache

<!-- Cache manager -->
<cache:annotation-driven/>
<bean id="cacheManager" class="org.springframework.cache.support.SimpleCacheManager">
   <property name="caches">
      <set>
         <bean class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean"
              p:name="${accg.cache.name}" p:allowNullValues="false" />

         <bean class="com.baidu.fbu.fcore.common.cache.RedisCache">
            <property name="name" value="${daycut.cache.name}" />
            <property name="ttl" value="${daycut.cache.ttl}"></property>
         </bean>
      </set>
   </property>
</bean>

采用的缓存是spring的已实现缓存SImpleCacheManager,定义了两个缓存方案:ConcurrentMapCacheFactoryBean 和 RedisCache。

前者的name为${accg.cache.name},后者的name为${daycut.cache.name}。


<!-- Cache interceptor & Advisor -->
<bean id="annotationCacheOperationSource" class="org.springframework.cache.annotation.AnnotationCacheOperationSource" />

<bean id="cacheInterceptor" class="com.baidu.fbu.fcore.common.cache.SignatureCacheInterceptor">
   <property name="cacheManager" ref="cacheManager"></property>
   <property name="keyGenerator" ref="keyGenerator"></property>
   <property name="cacheOperationSources" ref="annotationCacheOperationSource"></property>
</bean>

<bean id="beanFactoryCacheOperationSourceAdvisor" class="org.springframewor
k.cache.interceptor.BeanFactoryCacheOperationSourceAdvisor">
   <property name="order" value="10"></property>
   <property name="adviceBeanName" value="cacheInterceptor"></property>
   <property name="cacheOperationSource" ref="annotationCacheOperationSource"></property>
</bean>

cacheInterceptor


6. MyBatis

<!-- 创建SqlSessionFactory,同时指定数据源 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
   <property name="dataSource" ref="accgDataSource" />
   <property name="mapperLocations">
      <array>
         <value>classpath*:META-INF/mybatis/mapper/*.xml</value>
         <value>classpath*:META-INF/mybatis/mapper/batch/*.xml</value>
         <value>classpath*:META-INF/mybatis/mapper/accounting/*.xml</value>
      </array>
   </property>
   <property name="typeHandlersPackage" value="com.baidu.fbu.fcore.common.mybatis.type" />
   <property name="configurationProperties">
      <map>
         <entry key="__dbPrefix" value="${db.prefix}" />
      </map>
   </property>

   <!-- 分库分表规则 -->
   <property name="plugins">
      <list>
         <bean class="com.baidu.dba.jsqllib.plugin.ShardPlugin">
            <property name="shardingConfig" value="classpath:shardingConfig.xml" />
         </bean>
      </list>
   </property>
</bean>


<bean id="batchSqlSession" class="org.mybatis.spring.SqlSessionTemplate">
   <constructor-arg index="0" ref="sqlSessionFactory" />
   <constructor-arg index="1" value="BATCH" />
</bean>


7. Properties文件

<!-- 确保可在@Value中, 使用SeEL表达式获取资源属性 -->
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
   <property name="properties" ref="configProperties" />
</bean>

<bean id="configProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
   <property name="locations">
      <list>
         <value>classpath*:*.properties</value>
      </list>
   </property>
</bean>

上述配置将起作用的properties文件包含进来。

classpath*:*.properties,实际的property文件在test目录下。  /test/resource/config/xxx.properties



8. Transaction

<!-- 事务相关配置 -->
<tx:annotation-driven transaction-manager="transactionManager" order="1" />

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
   <property name="dataSource" ref="accgDataSource" />
</bean>

在配置文件中定义了transaction。


注意,仅当代码中抛出runtime exception才会回滚,其余exception则不会。






版权声明:本文为Lucifer2603原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。