• springboot的配置变量


    获取配置信息

    如果是被spring容器所管理,一般采用@Value注解就可以读取到application.yml文件的内容。

    但是不被spring容器管理,使用@Value是无效的。注入时会是NULL。但就是会有这样的场景,此时可采用在springboot启动类中将环境注入到某一个公共配置类,该类所有属性为公共静态属性攻外部类直接使用。

    1. ConfigurableApplicationContext run = SpringApplication.run(DemoStarterTestApplication.class, args);
    2. ConfigurableEnvironment environment = run.getEnvironment();
    3. String address = environment.getProperty("server.address1");
    4. int age = Integer.parseInt(environment.getProperty("spring.user.age"));
    5. 原文链接:https://blog.csdn.net/weixin_42740540/article/details/124348851

     继承PropertyResolver,里面可以操作配置参数

    JDBC操作获取系统变量

    1. InputStream is = ConnectionTest.class.getClassLoader().getResourceAsStream("jdbc.properties");
    2. Properties pros = new Properties();
    3. pros.load(is);
    4. String user = pros.getProperty("user");
    5. String password = pros.getProperty("password");
    6. String url = pros.getProperty("url");
    7. String driverClass = pros.getProperty("driverClass");

    1. @SpringBootApplication
    2. public class MybatisPlusDemoApplication {
    3. public static void main(String[] args) {
    4. ConfigurableApplicationContext run= SpringApplication.run(MybatisPlusDemoApplication.class, args);
    5. ConfigurableEnvironment environment = run.getEnvironment();
    6. String address = environment.getProperty("server.address1");
    7. String username = environment.getProperty("spring.datasource.username");
    8. int age = Integer.parseInt(environment.getProperty("spring.user.age"));
    9. String name = environment.getProperty("server.name");
    10. EnvConfig envConfig = new EnvConfig();
    11. envConfig.setAddress(address);
    12. envConfig.setAge(age);
    13. System.out.println("地址为"+EnvConfig.address+",年龄为"+EnvConfig.age+"名字是:"+name);
    14. //获取ioc容器中的组件名字并打印出来
    15. String[] userBeanNames = run.getBeanNamesForType(User.class);
    16. for (String s : userBeanNames){
    17. System.out.println("---user:"+s);
    18. }
    19. // 判断id为user01的对象是否存在
    20. boolean b = run.containsBean("user01");
    21. System.out.println(b);
    22. // 直接获取容器当中的user对象
    23. User bean = run.getBean(User.class);
    24. System.out.println(bean);
    25. AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
    26. context.getEnvironment().setActiveProfiles("like");
    27. context.register(AppConfigWithActiveProfile.class, AppConfigWithInactiveProfile.class);
    28. context.refresh();
    29. Subject subject = (Subject) context.getBean("subject");
    30. System.out.println("subject = " + subject);
    31. // ------------------------------ 测试 DependsOn ------------------------------
    32. AnnotationConfigApplicationContext contextDependsOn = new AnnotationConfigApplicationContext(AppConfigWithDependsOn.class);
    33. contextDependsOn.getBean(FirstBean.class);
    34. contextDependsOn.close();
    35. }
    36. }

     

    SecondBean Initialized via Constuctor
    ThirdBean Initialized via Constuctor
    FirstBean Initialized via Constuctor
    Logging initialized using 'class org.apache.ibatis.logging.stdout.StdOutImpl' adapter.
    Registered plugin: 'com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor@45792847'
    Registered plugin: 'com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor@706cb08'
    Parsed mapper file: 'file [D:\idea\gitDowload\WangPai1Zu\code\MybatisPlusDemo\target\classes\mapper\UserMapper.xml]'
     _ _   |_  _ _|_. ___ _ |    _ 
    | | |\/|_)(_| | |_\  |_)||_|_\ 
         /               |         
                            3.5.1 
    地址为aa,年龄为19名字是:aa
    ---user:user01
    true
    User(id=null, name=null, createTime=null, updateTime=null, age=null, email=null)
    subject = Subject{like='物理', wenke='null'}
    SecondBean Initialized via Constuctor
    ThirdBean Initialized via Constuctor
    FirstBean Initialized via Constuctor
     

    1. public class EnvConfig {
    2. public static String address;
    3. public static int age;
    4. public void setAddress(String address) {
    5. EnvConfig.address = address;
    6. }
    7. public void setAge(int age) {
    8. EnvConfig.age = age;
    9. }
    10. }
    1. @Configuration
    2. public class MyConfig {
    3. // 给容器中加入组件,以方法名作为组件id
    4. @Bean
    5. public User user01() {
    6. User user = new User();
    7. return user;
    8. }
    9. }
    1. @Profile("like")
    2. @Configuration
    3. public class AppConfigWithActiveProfile {
    4. @Bean
    5. public Subject subject(){
    6. Subject subject = new Subject();
    7. subject.setLike("物理");
    8. return subject;
    9. }
    10. }
    1. @Profile("wenke")
    2. @Configuration
    3. public class AppConfigWithInactiveProfile {
    4. @Bean
    5. public Subject subject(){
    6. Subject subject = new Subject();
    7. subject.setWenke("历史");
    8. return subject;
    9. }
    10. }
    1. @Data
    2. // 学科
    3. public class Subject {
    4. // 理科
    5. private String like;
    6. // 文科
    7. private String wenke;
    8. @Override
    9. public String toString() {
    10. return "Subject{" +
    11. "like='" + like + '\'' +
    12. ", wenke='" + wenke + '\'' +
    13. '}';
    14. }
    15. }

     

    1. public class FirstBean {
    2. @Autowired
    3. private SecondBean secondBean;
    4. @Autowired
    5. private ThirdBean thirdBean;
    6. public FirstBean() {
    7. System.out.println("FirstBean Initialized via Constuctor");
    8. }
    9. }
    1. @Configuration
    2. public class AppConfigWithDependsOn {
    3. @Bean("firstBean")
    4. @DependsOn(value = {
    5. "secondBean",
    6. "thirdBean"
    7. })
    8. public FirstBean firstBean() {
    9. return new FirstBean();
    10. }
    11. @Bean("secondBean")
    12. public SecondBean secondBean() {
    13. return new SecondBean();
    14. }
    15. @Bean("thirdBean")
    16. public ThirdBean thirdBean() {
    17. return new ThirdBean();
    18. }
    19. }
    1. public class SecondBean {
    2. public SecondBean() {
    3. System.out.println("SecondBean Initialized via Constuctor");
    4. }
    5. }

     

     

     

     

     

     

     


     

  • 相关阅读:
    MybatisPlus生成主键策略方法
    【Apipost】常用预(后)执行脚本方法
    基于Echarts实现可视化数据大屏城市规划系统
    诊断DLL——Visual Studio安装与dll使用
    V-Control Pro 3.0发布,为Presonus控制器增加Pro Tools高级控制
    网络安全与IP安全
    使用Scanner类进行控制台输入
    BioVendor sRAGE Elisa试剂盒化学性质和技术研究
    HTTP 和 HTTPS
    h0173. 01背包问题
  • 原文地址:https://blog.csdn.net/weixin_53150299/article/details/129719004