javascript
Spring Profiles example--转载
原文地址:http://www.mkyong.com/spring/spring-profiles-example/
Spring?@Profile?allow developers to register beans by condition. For example, register beans based on what operating system (Windows, *nix) your application is running, or load a database properties file based on the application running in development, test, staging or production environment.
In this tutorial, we will show you a Spring?@Profile?application, which does the following stuff :
?
Tools used :
1. Spring @Profile Examples
This?@Profile?annotation can be applied at class level or method level.
1.1 Normal Spring Configuration, enable caching, so that Spring will expect a cache manager at runtime.
AppConfig package com.mkyong.test; import org.springframework.cache.annotation.EnableCaching; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; @Configuration @EnableCaching @ComponentScan({ "com.mkyong.*" }) public class AppConfig { }1.2 A?dev?profile, which returns a simple cache manager?concurrentMapCacheManager
CacheConfigDev.java package com.mkyong.test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.cache.CacheManager; import org.springframework.cache.concurrent.ConcurrentMapCacheManager; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Profile; @Configuration @Profile("dev") public class CacheConfigDev { private static final Logger log = LoggerFactory.getLogger(CacheConfigDev.class); @Bean public CacheManager concurrentMapCacheManager() { log.debug("Cache manager is concurrentMapCacheManager"); return new ConcurrentMapCacheManager("movieFindCache"); } }1.3 A?live?profile, which returns?ehCacheCacheManager
CacheConfigLive.java package com.mkyong.test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.cache.CacheManager; import org.springframework.cache.ehcache.EhCacheCacheManager; import org.springframework.cache.ehcache.EhCacheManagerFactoryBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Profile; import org.springframework.core.io.ClassPathResource; @Configuration @Profile("live") public class CacheConfigLive { private static final Logger log = LoggerFactory.getLogger(CacheConfigDev.class); @Bean public CacheManager cacheManager() { log.debug("Cache manager is ehCacheCacheManager"); return new EhCacheCacheManager(ehCacheCacheManager().getObject()); } @Bean public EhCacheManagerFactoryBean ehCacheCacheManager() { EhCacheManagerFactoryBean cmfb = new EhCacheManagerFactoryBean(); cmfb.setConfigLocation(new ClassPathResource("ehcache.xml")); cmfb.setShared(true); return cmfb; } }2. Enable @Profile
Few code snippets to show you how to enable a Spring profile.
2.1 For non-web application, you can enable a profile via the Spring context environment.
App.java package com.mkyong.test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; public class App { public static void main(String[] args) { AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(); //Enable a "live" profile context.getEnvironment().setActiveProfiles("live"); context.register(AppConfig.class); context.refresh(); ((ConfigurableApplicationContext) context).close(); } }Output
DEBUG com.mkyong.test.CacheConfigDev - Cache manager is ehCacheCacheManagerOr, via the system property like this
App.java package com.mkyong.test; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.core.env.AbstractEnvironment; public class App { public static void main(String[] args) { //Enable a "dev" profile System.setProperty(AbstractEnvironment.ACTIVE_PROFILES_PROPERTY_NAME, "dev"); ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class); } }Output
DEBUG com.mkyong.test.CacheConfigDev - Cache manager is concurrentMapCacheManager2.2 For web application, defined a context parameter in?web.xml
web.xml <context-param><param-name>spring.profiles.active</param-name> <param-value>live</param-value> </context-param>2.3 For web application don’t have?web.xml, like servlet 3.0+ container
MyWebInitializer.java package com.mkyong.servlet3; import javax.servlet.ServletContext; import javax.servlet.ServletException; public class MyWebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { //... @Override public void onStartup(ServletContext servletContext) throws ServletException { super.onStartup(servletContext); servletContext.setInitParameter("spring.profiles.active", "live"); } }2.4 For Unit Test, uses?@ActiveProfiles
CacheManagerTest.java package com.mkyong.test; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.cache.CacheManager; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { AppConfig.class }) @ActiveProfiles("dev") public class CacheManagerTest { @Autowired private CacheManager cacheManager; @Test public void test_abc() { //... } }3. More…
3.1 Spring?@Profile?can apply at method level.
AppConfig.java package com.mkyong.test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.cache.CacheManager; import org.springframework.cache.annotation.EnableCaching; import org.springframework.cache.concurrent.ConcurrentMapCacheManager; import org.springframework.cache.ehcache.EhCacheCacheManager; import org.springframework.cache.ehcache.EhCacheManagerFactoryBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Profile; import org.springframework.core.io.ClassPathResource; @Configuration @EnableCaching @ComponentScan({ "com.mkyong.*" }) public class AppConfig { private static final Logger log = LoggerFactory.getLogger(AppConfig.class); @Bean @Profile("dev") public CacheManager concurrentMapCacheManager() { log.debug("Cache manager is concurrentMapCacheManager"); return new ConcurrentMapCacheManager("movieFindCache"); } @Bean @Profile("live") public CacheManager cacheManager() { log.debug("Cache manager is ehCacheCacheManager"); return new EhCacheCacheManager(ehCacheCacheManager().getObject()); } @Bean @Profile("live") public EhCacheManagerFactoryBean ehCacheCacheManager() { EhCacheManagerFactoryBean cmfb = new EhCacheManagerFactoryBean(); cmfb.setConfigLocation(new ClassPathResource("ehcache.xml")); cmfb.setShared(true); return cmfb; } }3.2 You can enable multiple profiles.
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(); context.getEnvironment().setActiveProfiles("live", "linux"); //or System.setProperty(AbstractEnvironment.ACTIVE_PROFILES_PROPERTY_NAME, "dev, windows"); web.xml <context-param><param-name>spring.profiles.active</param-name> <param-value>stage, postgresql</param-value> </context-param> @ActiveProfiles({"dev", "mysql","integration"}) ((ConfigurableEnvironment)context.getEnvironment()) .setActiveProfiles(new String[]{"dev", "embedded"});轉載于:https://www.cnblogs.com/davidwang456/p/5008206.html
總結
以上是生活随笔為你收集整理的Spring Profiles example--转载的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 马云:员工的离职原因--转载
- 下一篇: zookeeper源码分析之六sessi