有时我们需要在项目启动时就要加载一些数据到缓存中(spring缓存或第三方缓存),spring在启动时加载数据有两种方式*(我所知道的,如果还有别的方式欢迎告知,嘿嘿):实现InitializingBean和实现BeanPostProcessor
第一种:实现InitializingBean
这种方式比较简单,写一个service实现InitializingBean并在spring配置文件中配置一下,启动时就会加载数据
public class InternationalServiceImpl implements InitializingBean{ @Override public void afterPropertiesSet() throws Exception { System.err.println("重启开始加载数据。。。"); } }
配置文件:
<bean id = "internationalService" class="com.taotao.manage.service.InternationalServiceImpl"></bean>
测试例子:
public class LoadTest { private PBSTrackManagerPostProcessor pbsTrackManagerPostProcessor; @Before public void setUp() throws Exception { ApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"spring/applicationContext.xml"}); this.pbsTrackManagerPostProcessor = context.getBean(PBSTrackManagerPostProcessor.class); } @Test public void testQueryOrderByOrderNumber() { System.out.println("开始加载"); } }
结果:
重启开始加载数据。。。
第二种:实现BeanPostProcessor
数据层(这里写的比较简单):
public class Country implements Serializable{ private static final long serialVersionUID = 4014709713611499131L; private String Province; private String city; public String getProvince() { return Province; } public void setProvince(String province) { Province = province; } public String getCity() { return city; } public void setCity(String city) { this.city = city; } @Override public String toString() { return "Country [Province=" + Province + ", city=" + city + "]"; } }
service层:
@Service public class CountryServiceImpl implements CountryService{ @Override public List<Country> getAllCountry() { List<Country> countries = new ArrayList<Country>(); for(int i = 0;i <10;i++){ Country country = new Country(); country.setCity("北京"+i); country.setProvince("上海"+i); countries.add(country); } return countries; } }
再写一个service来调用这个service
public class StartOnLoadService { public static Map<String, List<Country>> map = new HashMap<String, List<Country>>(); @Autowired private CountryService countryService; public void loadAllCountries(){ List<Country> list = countryService.getAllCountry(); map.put("countryMap", list); System.out.println(map); } }
然后写一个processor来加载这个service
public class PBSTrackManagerPostProcessor implements BeanPostProcessor{ @Override public Object postProcessAfterInitialization(Object obj, String arg1) throws BeansException { if(obj instanceof StartOnLoadService){ ((StartOnLoadService)obj).loadAllCountries(); } return obj; } @Override public Object postProcessBeforeInitialization(Object arg0, String arg1) throws BeansException { // TODO Auto-generated method stub return arg0; } }
最后写配置文件:
<bean id="startOnLoadService" class="com.taotao.manage.controller.StartOnLoadService"></bean> <bean id="pbsTrackManagerPostProcessor" class="com.taotao.manage.controller.PBSTrackManagerPostProcessor"> </bean>
测试例子:
public class LoadTest { private PBSTrackManagerPostProcessor pbsTrackManagerPostProcessor; @Before public void setUp() throws Exception { ApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"spring/applicationContext.xml"}); this.pbsTrackManagerPostProcessor = context.getBean(PBSTrackManagerPostProcessor.class); } @Test public void testQueryOrderByOrderNumber() { System.out.println("开始加载"); } }
结果:
{countryMap=[Country [Province=上海0, city=北京0], Country [Province=上海1, city=北京1], Country [Province=上海2, city=北京2],。。。}
我觉得那个countryService可以不用写,当时就那么写了。大家可以尝试下
新手,不足指出请指教!
相关推荐
在`pom.xml`或`build.gradle`文件中添加依赖后,SpringBoot会自动加载SpringBatch的配置。 接着,SpringBatch的主要组件包括Job、Step、Tasklet、ItemReader、ItemWriter和ItemProcessor。Job是批处理任务的高层次...
当Spring容器加载时,它可以自动扫描指定包下的所有类,发现带有特定注解(如@Service、@Repository、@Component等)的类,并将它们作为Bean进行实例化。这些Bean在应用程序启动时会自动创建,无需手动调用new关键字...
在Spring Boot应用中,我们经常需要在项目启动时执行一些初始化任务,比如加载数据库数据、配置设置或者其他系统准备任务。Spring Boot为此提供了一个简洁的机制,即通过实现`CommandLineRunner`或`Application...
"Spring+mvc+mybatis Mapper xml自动加载"这个主题聚焦于如何在开发过程中优化配置,使得改动Mapper XML文件后,无需重启Tomcat服务器,就可以立即生效,从而提高开发效率。 Spring MVC是Spring框架的一部分,它...
在Web服务启动时自动加载Servlet是一种常见的优化策略,目的是在应用程序启动时就准备好Servlet实例,以便快速响应用户请求。本例中,我们将讨论如何配置Web服务以在启动时加载Servlet,并利用Spring框架来读取和...
完成所有配置步骤后,Spring框架会自动加载所有的Bean定义并初始化它们。这意味着应用程序现在已经准备好处理来自客户端的请求了。 #### 三、总结 Spring在Tomcat容器中的启动过程涉及多个步骤,从加载配置文件到...
在Spring框架中,自动扫描和管理Bean是一种便捷的方式,它允许开发者无需显式地在配置文件中声明每个Bean,而是让Spring容器自动发现并管理应用中的组件。这一特性极大地简化了Spring应用的配置,提高了开发效率。...
总结起来,`@ComponentScan`注解在Spring启动过程中起着至关重要的作用,它简化了Bean的配置,使得我们能够更加专注于业务代码。通过深入源码,我们可以更好地理解Spring如何管理和控制应用的生命周期,这对于Java...
总结起来,配置Spring+JPA与BoneCP数据源涉及的关键知识点包括:Spring框架、JPA、BoneCP连接池、数据库驱动、依赖管理、Spring配置、实体类、Repository接口以及Spring Boot的启动配置。理解并熟练掌握这些知识点,...
4. **启动和停止定时器**:在Spring应用启动时,由于配置了`autoStartup="true"`,Quartz定时器会自动启动。若需手动控制,可以使用ApplicationContext获取Scheduler实例并调用其`start()`或`standby()`方法来启动或...
`autoload-cache-spring-boot-starter` 是一个针对Java开发的Spring Boot项目的启动器,它专门设计用于自动加载和管理缓存。Spring Boot以其简洁的配置和开箱即用的特性深受开发者喜爱,而这个starter旨在进一步简化...
在Spring框架中,加载顺序是理解应用程序启动过程的关键部分,涉及到bean的实例化、初始化以及依赖注入等多个环节。本文将详细探讨Spring加载顺序,并结合`@PostConstruct`、`构造方法`以及`@Autowired`等关键注解...
在Spring框架中,Bean的加载顺序是理解Spring IoC(Inversion of Control,控制反转)容器工作原理的关键部分。这个过程涉及到Bean定义的解析、实例化、初始化等多个步骤。让我们详细探讨Spring Bean加载顺序的各个...
Spring还提供了大量的模块,如Spring MVC用于构建Web应用,Spring Data支持多种数据存取技术,包括与Hibernate的集成。 **BIRT整合** BIRT整合SSH框架,主要是为了在Web应用中添加报表功能。BIRT可以作为独立的应用...
2. `@PropertySource`: 在类上使用这个注解可以指定一个或多个属性文件,Spring会自动加载并解析其中的属性。如果属性文件位于类路径下,可以直接写类路径路径,如`@PropertySource("classpath:config.properties")`...
例如,如果一个类需要依赖`MyService`,只需要在成员变量上添加`@Autowired`即可,Spring会在启动时自动寻找合适的bean进行注入。 至于标签“工具”,这可能指的是在开发过程中,使用IDEA或者Eclipse等集成开发环境...
Dao(Data Access Object)层负责与数据库的交互,自动生成的Dao通常包含了一些基本的SQL查询方法,如根据ID获取、添加、更新和删除记录。 8. **项目结构**: 压缩包文件"spring-boot-api-project-seed-master"很...
通过分析classpath中的依赖,Spring Boot会自动为相应的服务添加配置,如数据源、Web服务器、缓存等。 2. **Bean的生命周期** 在Spring Boot中,bean的创建和初始化是启动过程中的重要环节。当应用启动时,Spring...
Spring Boot以其简洁的配置和快速的启动能力深受开发者喜爱,而Spring Batch作为Spring框架的一部分,专注于批量处理任务,提供了强大的数据处理能力和事务管理功能。下面我们将深入探讨这个主题。 首先,**Spring ...
在Spring启动时,通过配置Jasypt的解密器,使得Spring能够自动解密并加载这些加密的属性。 2. **环境变量或系统属性**:将敏感信息存储在环境变量或系统属性中,而不是直接写在配置文件里。这样,即使有人获取到...