`

spring启动自动加载数据

 
阅读更多

有时我们需要在项目启动时就要加载一些数据到缓存中(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可以不用写,当时就那么写了。大家可以尝试下

新手,不足指出请指教!

 

 

分享到:
评论

相关推荐

    springBoot+springBatch批量处理数据demo

    在`pom.xml`或`build.gradle`文件中添加依赖后,SpringBoot会自动加载SpringBatch的配置。 接着,SpringBatch的主要组件包括Job、Step、Tasklet、ItemReader、ItemWriter和ItemProcessor。Job是批处理任务的高层次...

    Spring 自启动项目demo

    当Spring容器加载时,它可以自动扫描指定包下的所有类,发现带有特定注解(如@Service、@Repository、@Component等)的类,并将它们作为Bean进行实例化。这些Bean在应用程序启动时会自动创建,无需手动调用new关键字...

    spring boot启动加载数据原理分析

    在Spring Boot应用中,我们经常需要在项目启动时执行一些初始化任务,比如加载数据库数据、配置设置或者其他系统准备任务。Spring Boot为此提供了一个简洁的机制,即通过实现`CommandLineRunner`或`Application...

    Spring+mvc+mybatis Mapper xml自动加载

    "Spring+mvc+mybatis Mapper xml自动加载"这个主题聚焦于如何在开发过程中优化配置,使得改动Mapper XML文件后,无需重启Tomcat服务器,就可以立即生效,从而提高开发效率。 Spring MVC是Spring框架的一部分,它...

    Web服务启动时自动加载Servlet,并读取数据库内容

    在Web服务启动时自动加载Servlet是一种常见的优化策略,目的是在应用程序启动时就准备好Servlet实例,以便快速响应用户请求。本例中,我们将讨论如何配置Web服务以在启动时加载Servlet,并利用Spring框架来读取和...

    spring启动.txt

    完成所有配置步骤后,Spring框架会自动加载所有的Bean定义并初始化它们。这意味着应用程序现在已经准备好处理来自客户端的请求了。 #### 三、总结 Spring在Tomcat容器中的启动过程涉及多个步骤,从加载配置文件到...

    spring自动扫描和管理Bean的示例

    在Spring框架中,自动扫描和管理Bean是一种便捷的方式,它允许开发者无需显式地在配置文件中声明每个Bean,而是让Spring容器自动发现并管理应用中的组件。这一特性极大地简化了Spring应用的配置,提高了开发效率。...

    spring启动componentscan类扫描加载过程

    总结起来,`@ComponentScan`注解在Spring启动过程中起着至关重要的作用,它简化了Bean的配置,使得我们能够更加专注于业务代码。通过深入源码,我们可以更好地理解Spring如何管理和控制应用的生命周期,这对于Java...

    各种数据源配置之Spring+JPA配置BoneCP数据源

    总结起来,配置Spring+JPA与BoneCP数据源涉及的关键知识点包括:Spring框架、JPA、BoneCP连接池、数据库驱动、依赖管理、Spring配置、实体类、Repository接口以及Spring Boot的启动配置。理解并熟练掌握这些知识点,...

    spring和quartz的定时器的启动和停止例子

    4. **启动和停止定时器**:在Spring应用启动时,由于配置了`autoStartup="true"`,Quartz定时器会自动启动。若需手动控制,可以使用ApplicationContext获取Scheduler实例并调用其`start()`或`standby()`方法来启动或...

    autoload-cache-spring-boot-starter:自动加载缓存spring boot starter

    `autoload-cache-spring-boot-starter` 是一个针对Java开发的Spring Boot项目的启动器,它专门设计用于自动加载和管理缓存。Spring Boot以其简洁的配置和开箱即用的特性深受开发者喜爱,而这个starter旨在进一步简化...

    spring加载顺序讨论

    在Spring框架中,加载顺序是理解应用程序启动过程的关键部分,涉及到bean的实例化、初始化以及依赖注入等多个环节。本文将详细探讨Spring加载顺序,并结合`@PostConstruct`、`构造方法`以及`@Autowired`等关键注解...

    Spring Bean 加载顺序 .

    在Spring框架中,Bean的加载顺序是理解Spring IoC(Inversion of Control,控制反转)容器工作原理的关键部分。这个过程涉及到Bean定义的解析、实例化、初始化等多个步骤。让我们详细探讨Spring Bean加载顺序的各个...

    struts hibernate spring整合birt

    Spring还提供了大量的模块,如Spring MVC用于构建Web应用,Spring Data支持多种数据存取技术,包括与Hibernate的集成。 **BIRT整合** BIRT整合SSH框架,主要是为了在Web应用中添加报表功能。BIRT可以作为独立的应用...

    Spring动态加载配置文件

    2. `@PropertySource`: 在类上使用这个注解可以指定一个或多个属性文件,Spring会自动加载并解析其中的属性。如果属性文件位于类路径下,可以直接写类路径路径,如`@PropertySource("classpath:config.properties")`...

    Spring2.5 自动扫描classpath

    例如,如果一个类需要依赖`MyService`,只需要在成员变量上添加`@Autowired`即可,Spring会在启动时自动寻找合适的bean进行注入。 至于标签“工具”,这可能指的是在开发过程中,使用IDEA或者Eclipse等集成开发环境...

    Spring Boot Mybatis 自动生成Entity,controller、serviceImpl ,Dao,方便开发,无需手写

    Dao(Data Access Object)层负责与数据库的交互,自动生成的Dao通常包含了一些基本的SQL查询方法,如根据ID获取、添加、更新和删除记录。 8. **项目结构**: 压缩包文件"spring-boot-api-project-seed-master"很...

    Spring启动时间表

    通过分析classpath中的依赖,Spring Boot会自动为相应的服务添加配置,如数据源、Web服务器、缓存等。 2. **Bean的生命周期** 在Spring Boot中,bean的创建和初始化是启动过程中的重要环节。当应用启动时,Spring...

    Spring Boot整合Spring Batch,实现批处理

    Spring Boot以其简洁的配置和快速的启动能力深受开发者喜爱,而Spring Batch作为Spring框架的一部分,专注于批量处理任务,提供了强大的数据处理能力和事务管理功能。下面我们将深入探讨这个主题。 首先,**Spring ...

    spring中的数据源配置信息加密方案

    在Spring启动时,通过配置Jasypt的解密器,使得Spring能够自动解密并加载这些加密的属性。 2. **环境变量或系统属性**:将敏感信息存储在环境变量或系统属性中,而不是直接写在配置文件里。这样,即使有人获取到...

Global site tag (gtag.js) - Google Analytics