`

Spring加载自定义配置文件内容

 
阅读更多

一: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动态加载配置文件

    除了这两种方式,Spring Boot引入了更强大的`ConfigDataLocationResolver`和`ConfigDataLoader`接口,它们允许我们自定义配置数据的加载逻辑,支持更丰富的数据源,如Git、HTTP等。 在实际应用中,我们可能还需要...

    Spring@PropertySource 配置文件自定义加密、自定义Yaml文件加载

    1. **配置加载顺序**:Spring加载配置文件时有默认的顺序,如果你同时使用了加密的.properties和YAML配置,需要合理安排加载顺序,以保证依赖关系正确。 2. **自定义`ApplicationContextInitializer`**:如果你需要...

    Spring Boot自定义配置属性源(PropertySource)

    Spring Boot的自定义配置属性源(PropertySource)是框架中一个强大的特性,它允许开发者引入额外的配置文件或从各种来源获取配置,以满足不同环境的特定需求。配置覆盖是解决多环境配置问题的一种常见策略,它允许...

    spring配置文件加密实现

    为了集成TE网络到Spring应用中,我们需要在应用程序启动时挂载这个加密文件系统,并确保Spring加载配置文件时通过这个加密层。这通常涉及到自定义类加载器或者修改Spring的初始化逻辑。当Spring尝试读取配置文件时,...

    Springboot读取配置文件及自定义配置文件的方法

    以下是对Spring Boot读取配置文件及自定义配置文件方法的详细解释。 1. **默认配置文件** Spring Boot默认使用`application.properties`或`application.yml`作为主配置文件。这两个文件位于`src/main/resources`...

    spring读取jar中的配置文件

    为了使Spring Boot能够找到JAR内的配置文件,可以在`src/main/resources`目录下创建`META-INF/spring.factories`文件,并添加以下内容: ``` org.springframework.boot.autoconfigure.EnableAutoConfiguration=...

    spring mvc的配置文件详解

    DispatcherServlet 加载时,Spring 会尝试读取相关的配置文件。默认情况下,这些配置文件位于 web.xml 相同的路径下,并且文件名与注册的 Servlet 名相关联,即 `&lt;servlet-name&gt;-servlet.xml`。例如,在本例中,默认...

    Spring加载加密的配置文件详解

    现在,当Spring加载`db.properties`时,`EncryptPropertyPlaceholderConfigurer`会自动解密`db.password`,并将其作为安全的密码值传递给应用程序的其他组件。 总之,通过自定义`PropertyPlaceholderConfigurer`...

    让spring加载自己的properties配置文件,在代码中获得配置信息

    本文将详细介绍如何让Spring自动加载自定义的`.properties`配置文件,并在代码中获取这些配置信息。 首先,我们需要创建一个`.properties`文件。这个文件通常命名为`application.properties`或根据项目需求自定义,...

    利用Spring Context上下文创建自定义对象

    在Spring应用中,Context通常通过`ApplicationContext`接口来实例化,如`ClassPathXmlApplicationContext`或`FileSystemXmlApplicationContext`,这些类用于加载XML配置文件并初始化bean。 创建自定义对象的基本...

    Spring Boot读取配置文件常用方式

    在Spring Boot应用中,配置文件的管理是至关重要的,它允许开发者灵活地配置应用程序的行为,而无需修改代码。Spring Boot提供了多种方式来读取和使用这些配置文件,使其更加便捷和高效。以下将详细介绍Spring Boot...

    spring加载顺序讨论

    本文将详细探讨Spring加载顺序,并结合`@PostConstruct`、`构造方法`以及`@Autowired`等关键注解进行深入解析。 首先,Spring容器在启动时会读取配置文件(如XML或Java配置类),根据配置信息创建Bean的定义。Bean...

    加载spring 文件,在web.xml中的配置

    当我们谈论“加载Spring文件,在web.xml中的配置”时,主要是指如何在Web应用启动时初始化Spring IoC(Inversion of Control,控制反转)容器并加载配置文件。 1. **使用ContextLoaderListener** `&lt;listener&gt;`标签...

    spring-security实现自定义登录认证.rar

    这个压缩包中的“demo”文件可能包含了以上所有步骤的代码示例,包括Spring Security的基本配置、自定义UserDetailsService、AuthenticationProvider以及JWT的生成和验证。通过学习和运行这个示例,你可以深入理解...

    YAMLDemo:Spring Boot 2.0获取自定义YAML配置Demo

    在本文中,我们将深入探讨如何在Spring Boot 2.0应用...在实际项目中,可以根据需求创建多个自定义配置文件,以便更好地管理复杂的配置结构。在YAMLDemo-master项目中,你将看到一个完整的示例,展示如何实现这一过程。

    spring 启动时加载不同的文件

    ### Spring启动时根据配置文件加载不同文件的知识点详解 #### 一、背景介绍 在实际的应用开发中,根据运行环境的不同(例如开发环境、测试环境、生产环境等),应用程序往往需要连接不同的数据库或其他资源。为了...

    Spring PropertyPlaceholderConfigurer配置文件加载器集成ZooKeeper来实现远程配置读取

    以上就是关于"Spring PropertyPlaceholderConfigurer配置文件加载器集成ZooKeeper来实现远程配置读取"的详细解释,涵盖了Spring的配置处理、ZooKeeper的使用以及两者结合的实现过程。理解并掌握这一技术,有助于提升...

    spring boot中配置mybatis热加载相关文件

    创建一个配置类,继承`org.springframework.boot/autoconfigure/mybatis/MybatisAutoConfiguration`,然后重写`mapperLocations`方法,引入上面配置文件中的路径,以实现XML文件的热加载。例如: ```java @...

    自定义MVC框架(spring)

    综上所述,自定义Spring MVC框架涉及到的主要知识点包括:MVC模式、请求分发、控制器设计、模型管理、视图解析、配置与依赖注入,以及Web应用的基本文件结构。通过实践这个项目,开发者可以深入理解Spring MVC的工作...

    [课堂课件讲解]Java微服务实践-Spring Boot 自定义启动器.pptx

    放置自动装配Bean(META-INF/spring.factories)将标记@Configuration的Spring Configuration Class放置在相对于class-path下的META-INF/spring.factories文件中,以便在系统启动时自动加载相应的组件。 Spring ...

Global site tag (gtag.js) - Google Analytics