zoukankan      html  css  js  c++  java
  • SpringBoot中指定某些类优先启动

    一、需求

      1、项目中对某些IP地址和端口做了限制,只有写在配置文件的内容(ip)才可以访问项目。

      2、在进行测试案例运行时保证读取配置文件中ip和port的类(CbeConfig)得提前运行。

    二、工作

      1、如下的测试时肯定不行

        @Test
        public void getCbeTest(){
            CbeConfig cbeConfig = new CbeConfig();
            System.out.println("IP是" + cbeConfig.getIp());
            System.out.println("Port是" + cbeConfig.port);
        }

      2、保证CbeConfig类在程序运行起来的那一刻先存在,先写一个读取配置的类,程序运行起来后读取到配置后,然后再将读取的参数设置到另一个类(CbeConfigAfter)中,以后提取参数。都使用CbeConfigAfter。

      CbeConfigBefore类实现ApplicationRunner接口的run方法

    package com.example.demo;
    
    import lombok.Getter;
    import lombok.Setter;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.boot.ApplicationArguments;
    import org.springframework.boot.ApplicationRunner;
    import org.springframework.stereotype.Component;
    
    @Component
    
    public class CbeConfigBefore implements ApplicationRunner {
    
        @Value("${cbe.ip}")
        public  String ip;
    
    
        @Value("${cbe.port}")
        public  Integer port;
    
        @Override
        public void run(ApplicationArguments applicationArguments) throws Exception {
            System.out.println("我第一个启动");
            System.out.println("哈哈ip" + ip);
            System.out.println("哈哈port" + port);
            CbeConfigAfter cbeConfigAfter = CbeConfigAfter.getInstance();
            cbeConfigAfter.setIp(ip);
            cbeConfigAfter.setPort(port);
            System.out.println("设置完毕");
        }
    
        public String getIp() {
            return ip;
        }
    
        public void setIp(String ip) {
            this.ip = ip;
        }
    
        public int getPort() {
            return port;
        }
    
        public void setPort(int port) {
            this.port = port;
        }
    }

       CbeConfigAfter类写成单例模式

    package com.example.demo;
    
    
    import lombok.Getter;
    import lombok.Setter;
    
    public class CbeConfigAfter {
    
        public String getIp() {
            return ip;
        }
    
        public void setIp(String ip) {
            this.ip = ip;
        }
    
        public int getPort() {
            return port;
        }
    
        public void setPort(int port) {
            this.port = port;
        }
    
        String ip;
    
        int port;
    
        private static CbeConfigAfter cbeConfigAfter;
        private CbeConfigAfter (){}
        public static synchronized CbeConfigAfter getInstance() {
            if (cbeConfigAfter == null) {
                cbeConfigAfter = new CbeConfigAfter();
            }
            return cbeConfigAfter;
        }
    }

      测试类

    package com.example.demo.controllerTest;
    
    import com.example.demo.CbeConfigAfter;
    import com.example.demo.CbeConfigBefore;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.junit.runners.JUnit4;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.boot.SpringBootConfiguration;
    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.boot.test.context.SpringBootTest;
    import org.springframework.test.context.TestPropertySource;
    import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
    
    @SpringBootTest
    @RunWith(SpringJUnit4ClassRunner.class)
    public class CbeTest {
    
    
    
        @Test
        public void getCbeByAfterTest(){
            CbeConfigAfter instance = CbeConfigAfter.getInstance();
            System.out.println("IP是" + instance.getIp());
            System.out.println("端口是" + instance.getPort());
        }
    
        @Test
        public void getCbeBeforeTest(){
            CbeConfigBefore cbeConfig = new CbeConfigBefore();
            System.out.println("IP是" + cbeConfig.getIp());
            System.out.println("Port是" + cbeConfig.port);
        }
    }

      此时再运行getCbeByAfterTest测试类,OK,搞定。

    虽然搞定,但是我还是仍有心有疑虑,请有幸读完的同志挑挑毛病。谢谢。

    三、补充总结

      1、自定义文件不能使用.yml结尾

      今天又再次尝试,发现上面的方法太LOW了,其实可以直接自己定义一个person.properties。注意不能定义为person.yml文件,因为如果这样定义,是无法加载到person.yml中的内容(亲测过)。

    person.name=xx
    person.age=20

      2、Bean的类

    import lombok.Getter;
    import lombok.Setter;
    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.context.annotation.PropertySource;
    import org.springframework.stereotype.Component;
    
    @Component
    @Getter
    @Setter
    @PropertySource("classpath:defineConfig/person.properties")
    @ConfigurationProperties(prefix = "person")
    public class Person {
      String name;
      Integer age;
    }

      3、使用这样的方式去注入Person

      @Autowired
      Person person;

      4、测试类

    import cn.com.acca.ramsibe.config.authinfo.AirlineAuthInfo;
    import cn.com.acca.ramsibe.config.authinfo.AuthIpInfo;
    import cn.com.acca.ramsibe.config.authinfo.Person;
    import cn.com.acca.ramsibe.config.ibeconfig.IbeConfigInfo;
    import cn.com.acca.ramsibe.config.ibeconfig.IbeServer;
    import lombok.extern.java.Log;
    import org.junit.Assert;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.context.SpringBootTest;
    import org.springframework.test.context.junit4.SpringRunner;
    import java.util.List;
    
    @RunWith(SpringRunner.class)
    @SpringBootTest
    @Log
    public class IbeConfigTest {
    
      @Autowired
      Person person;
    
      @Test
      public void PersonTest() {
        System.out.println("年龄" + person.getAge());
      }
    }

     

      

    本文来自博客园,作者:编程狸,转载请注明原文链接:https://www.cnblogs.com/ping-pong/p/11605166.html

  • 相关阅读:
    按照指定的字符串拆分字符串,split()方法。
    charAt()取出指定位置的字符 .length()得到一个字符串的长度 indexOf()查找一个指定的字符是否存在并返回其位置 trim()去掉字符串的左右空格 substring()字符串的截取 str.replace(" ", ""); 去掉所有空格,包括首尾、中间
    字符串与字符数组的多种转换方式。
    匿名对象。
    构造方法。
    递归的练习,1.统计文件夹大小 2.删除文件夹及文件夹下的文件
    jquery零散小饼干
    jQuery review
    git解决冲突
    url、href、src
  • 原文地址:https://www.cnblogs.com/ping-pong/p/11605166.html
Copyright © 2011-2022 走看看