当前位置:首页 > 编程笔记 > 正文
已解决

springboot的配置变量

来自网友在路上 179879提问 提问时间:2023-09-20 08:40:31阅读次数: 79

最佳答案 问答题库798位专家为你答疑解惑

获取配置信息

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

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

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

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

JDBC操作获取系统变量

    InputStream is =        ConnectionTest.class.getClassLoader().getResourceAsStream("jdbc.properties");Properties pros = new Properties();pros.load(is);String user = pros.getProperty("user");String password = pros.getProperty("password");String url = pros.getProperty("url");String driverClass = pros.getProperty("driverClass");


@SpringBootApplication
public class MybatisPlusDemoApplication {public static void main(String[] args) {ConfigurableApplicationContext run= SpringApplication.run(MybatisPlusDemoApplication.class, args);ConfigurableEnvironment environment = run.getEnvironment();String address = environment.getProperty("server.address1");String username = environment.getProperty("spring.datasource.username");int age = Integer.parseInt(environment.getProperty("spring.user.age"));String name = environment.getProperty("server.name");EnvConfig envConfig = new EnvConfig();envConfig.setAddress(address);envConfig.setAge(age);System.out.println("地址为"+EnvConfig.address+",年龄为"+EnvConfig.age+"名字是:"+name);//获取ioc容器中的组件名字并打印出来String[] userBeanNames = run.getBeanNamesForType(User.class);for (String s : userBeanNames){System.out.println("---user:"+s);}// 判断id为user01的对象是否存在boolean b = run.containsBean("user01");System.out.println(b);// 直接获取容器当中的user对象User bean = run.getBean(User.class);System.out.println(bean);AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();context.getEnvironment().setActiveProfiles("like");context.register(AppConfigWithActiveProfile.class, AppConfigWithInactiveProfile.class);context.refresh();Subject subject = (Subject) context.getBean("subject");System.out.println("subject = " + subject);// ------------------------------ 测试 DependsOn  ------------------------------AnnotationConfigApplicationContext contextDependsOn = new AnnotationConfigApplicationContext(AppConfigWithDependsOn.class);contextDependsOn.getBean(FirstBean.class);contextDependsOn.close();}}

 

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
 


public class EnvConfig {public static String address;public static int age;public  void setAddress(String address) {EnvConfig.address = address;}public  void setAge(int age) {EnvConfig.age = age;}}
@Configuration
public class MyConfig {// 给容器中加入组件,以方法名作为组件id@Beanpublic User user01() {User user = new User();return user;}
}

@Profile("like")
@Configuration
public class AppConfigWithActiveProfile {@Beanpublic Subject subject(){Subject subject = new Subject();subject.setLike("物理");return subject;}}
@Profile("wenke")
@Configuration
public class AppConfigWithInactiveProfile {@Beanpublic Subject subject(){Subject subject = new Subject();subject.setWenke("历史");return subject;}
}

@Data
// 学科
public class Subject {// 理科private String like;// 文科private String wenke;@Overridepublic String toString() {return "Subject{" +"like='" + like + '\'' +", wenke='" + wenke + '\'' +'}';}
}

 

public class FirstBean {@Autowiredprivate SecondBean secondBean;@Autowiredprivate ThirdBean thirdBean;public FirstBean() {System.out.println("FirstBean Initialized via Constuctor");}
}

@Configuration
public class AppConfigWithDependsOn {@Bean("firstBean")@DependsOn(value = {"secondBean","thirdBean"})public FirstBean firstBean() {return new FirstBean();}@Bean("secondBean")public SecondBean secondBean() {return new SecondBean();}@Bean("thirdBean")public ThirdBean thirdBean() {return new ThirdBean();}
}
public class SecondBean {public SecondBean() {System.out.println("SecondBean Initialized via Constuctor");}
}

 

 

 

 

 

 

 


 

查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"springboot的配置变量":http://eshow365.cn/6-9895-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!