一:bean的XML配置文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="restfulBean" class="com.hyxt.restful.registry.RestfulBean" init-method="start">
<property name="zkClient" ref="zkClient"/>
<property name="root" value="restfulCommand"/>
<property name="businessMap">
<map>
<!--<entry key="cashCommand" value="http://{server}:8082/posRequest/forPosApi/posMutual"/>
<entry key="cashCommand1" value="http://{server}:8080/demoPrj/rest/demo1"/>
<entry key="cashCommand2" value="http://{server}:8080/demoPrj/rest/demo2"/>-->
</map>
</property>
</bean>
<!-- 引入zookeeper client bean -->
<import resource="zookeeper.xml"/>
</beans>
二:Bean实现类如下:
public class RestfulBean implements Restful {
private Logger logger = LoggerFactory.getLogger(RestfulBean.class);
private String root;
private Map<String,String> businessMap;
protected ZkClient zkClient;
public String getRoot() {
return root;
}
public void setRoot(String root) {
this.root = root;
}
public Map<String, String> getBusinessMap() {
return businessMap;
}
public void setBusinessMap(Map<String, String> businessMap) {
this.businessMap = businessMap;
}
public ZkClient getZkClient() {
return zkClient;
}
public void setZkClient(ZkClient zkClient) {
this.zkClient = zkClient;
}
public void start() {
if(root==null||"".equals(root)){
throw new RuntimeException("没有定义根节点");
}
if(businessMap==null){
throw new RuntimeException("没有定义restful服务");
}
try {
for (String businessKey : businessMap.keySet()){
String url = businessMap.get(businessKey);
url = url.replace("{server}", NetUtils.getLocalHost());
url = URLEncoder.encode(url, "UTF-8");
String path = ZKPaths.makePath(root, businessKey, url);
//不管有没有,先删除掉再开始发布
try{
zkClient.deletePath(path);
}catch (Exception e){
;
}
zkClient.createPath(path, CreateMode.EPHEMERAL);
logger.info("发布reftful服务[{}]: {} 成功",businessKey,url);
}
} catch (Exception e) {
throw new RuntimeException(e.getMessage(),e);
}
}
@Override
public List<String> getRestUrls(String businessKey) {
try{
List<String> children = zkClient.getChildren(ZKPaths.makePath(root, businessKey));
return Lists.transform(children, new Function<String, String>() {
@Override
public String apply(String s) {
try {
return URLDecoder.decode(s, "UTF-8");
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e.getMessage(), e);
}
}
});
}catch (Exception e){
logger.error(e.getMessage(),e);
return null;
}
}
@Override
public String getRestUrl(String businessKey) {
try{
List<String> restUrls = getRestUrls(businessKey);
if (restUrls != null&&restUrls.size()>0) {
return restUrls.get(new Random().nextInt(restUrls.size()));
}
}catch (Exception e){
logger.error(e.getMessage(),e);
}
return null;
}
@Override
public void listener(final String businessKey, final RestfulListener listener) {
try{
zkClient.pathListener(ZKPaths.makePath(root, businessKey), new PathChildrenCacheListener() {
@Override
public void childEvent(CuratorFramework client, PathChildrenCacheEvent event) throws Exception {
listener.childChange(businessKey);
}
});
}catch (Exception e){
logger.error(e.getMessage(),e);
}
}
}
三:初始化时加载配置文件,如test.xml
相关推荐
除了这两种方式,Spring Boot引入了更强大的`ConfigDataLocationResolver`和`ConfigDataLoader`接口,它们允许我们自定义配置数据的加载逻辑,支持更丰富的数据源,如Git、HTTP等。 在实际应用中,我们可能还需要...
1. **配置加载顺序**:Spring加载配置文件时有默认的顺序,如果你同时使用了加密的.properties和YAML配置,需要合理安排加载顺序,以保证依赖关系正确。 2. **自定义`ApplicationContextInitializer`**:如果你需要...
Spring Boot的自定义配置属性源(PropertySource)是框架中一个强大的特性,它允许开发者引入额外的配置文件或从各种来源获取配置,以满足不同环境的特定需求。配置覆盖是解决多环境配置问题的一种常见策略,它允许...
为了集成TE网络到Spring应用中,我们需要在应用程序启动时挂载这个加密文件系统,并确保Spring加载配置文件时通过这个加密层。这通常涉及到自定义类加载器或者修改Spring的初始化逻辑。当Spring尝试读取配置文件时,...
以下是对Spring Boot读取配置文件及自定义配置文件方法的详细解释。 1. **默认配置文件** Spring Boot默认使用`application.properties`或`application.yml`作为主配置文件。这两个文件位于`src/main/resources`...
为了使Spring Boot能够找到JAR内的配置文件,可以在`src/main/resources`目录下创建`META-INF/spring.factories`文件,并添加以下内容: ``` org.springframework.boot.autoconfigure.EnableAutoConfiguration=...
DispatcherServlet 加载时,Spring 会尝试读取相关的配置文件。默认情况下,这些配置文件位于 web.xml 相同的路径下,并且文件名与注册的 Servlet 名相关联,即 `<servlet-name>-servlet.xml`。例如,在本例中,默认...
现在,当Spring加载`db.properties`时,`EncryptPropertyPlaceholderConfigurer`会自动解密`db.password`,并将其作为安全的密码值传递给应用程序的其他组件。 总之,通过自定义`PropertyPlaceholderConfigurer`...
本文将详细介绍如何让Spring自动加载自定义的`.properties`配置文件,并在代码中获取这些配置信息。 首先,我们需要创建一个`.properties`文件。这个文件通常命名为`application.properties`或根据项目需求自定义,...
在Spring应用中,Context通常通过`ApplicationContext`接口来实例化,如`ClassPathXmlApplicationContext`或`FileSystemXmlApplicationContext`,这些类用于加载XML配置文件并初始化bean。 创建自定义对象的基本...
在Spring Boot应用中,配置文件的管理是至关重要的,它允许开发者灵活地配置应用程序的行为,而无需修改代码。Spring Boot提供了多种方式来读取和使用这些配置文件,使其更加便捷和高效。以下将详细介绍Spring Boot...
本文将详细探讨Spring加载顺序,并结合`@PostConstruct`、`构造方法`以及`@Autowired`等关键注解进行深入解析。 首先,Spring容器在启动时会读取配置文件(如XML或Java配置类),根据配置信息创建Bean的定义。Bean...
当我们谈论“加载Spring文件,在web.xml中的配置”时,主要是指如何在Web应用启动时初始化Spring IoC(Inversion of Control,控制反转)容器并加载配置文件。 1. **使用ContextLoaderListener** `<listener>`标签...
这个压缩包中的“demo”文件可能包含了以上所有步骤的代码示例,包括Spring Security的基本配置、自定义UserDetailsService、AuthenticationProvider以及JWT的生成和验证。通过学习和运行这个示例,你可以深入理解...
在本文中,我们将深入探讨如何在Spring Boot 2.0应用...在实际项目中,可以根据需求创建多个自定义配置文件,以便更好地管理复杂的配置结构。在YAMLDemo-master项目中,你将看到一个完整的示例,展示如何实现这一过程。
### Spring启动时根据配置文件加载不同文件的知识点详解 #### 一、背景介绍 在实际的应用开发中,根据运行环境的不同(例如开发环境、测试环境、生产环境等),应用程序往往需要连接不同的数据库或其他资源。为了...
以上就是关于"Spring PropertyPlaceholderConfigurer配置文件加载器集成ZooKeeper来实现远程配置读取"的详细解释,涵盖了Spring的配置处理、ZooKeeper的使用以及两者结合的实现过程。理解并掌握这一技术,有助于提升...
创建一个配置类,继承`org.springframework.boot/autoconfigure/mybatis/MybatisAutoConfiguration`,然后重写`mapperLocations`方法,引入上面配置文件中的路径,以实现XML文件的热加载。例如: ```java @...
综上所述,自定义Spring MVC框架涉及到的主要知识点包括:MVC模式、请求分发、控制器设计、模型管理、视图解析、配置与依赖注入,以及Web应用的基本文件结构。通过实践这个项目,开发者可以深入理解Spring MVC的工作...
放置自动装配Bean(META-INF/spring.factories)将标记@Configuration的Spring Configuration Class放置在相对于class-path下的META-INF/spring.factories文件中,以便在系统启动时自动加载相应的组件。 Spring ...