首页 > 其他分享 >Solon2 开发之容器,一、注入或手动获取配置

Solon2 开发之容器,一、注入或手动获取配置

时间:2023-02-12 21:55:46浏览次数:46  
标签:容器 track 手动 Bean Inject Solon2 db1 public 注入

约定

resources/app.yml( 或 app.properties ) #为应用配置文件

配置样例

track:
  name: xxx
  url: http://a.a.a
  db1:
    jdbcUrl: "jdbc:mysql://..."
    username: "xxx"
    password: "xxx"

1、如何通过注入获得配置?

  • 注入到字段
@Service
public class DemoService{
    //注入值(带默认值:demoApi),并开启自动更新(注意:如果不是单例,请不要开启自动刷新)
    @Inject(value="${track.name:demoApi}", autoRefreshed=true)
    String trackName;
    
    //注入值(没有时,不覆盖字段初始值)
    @Inject("${track.url}")
    String trackUrl = "http://x.x.x/track";
    
    //注入配置集合
    @Inject("${track.db1}")
    Properties trackDbCfg;
    
    //注入Bean(根据对应的配置集合自动生成并注入)
    @Inject("${track.db1}")
    HikariDataSource trackDs;
    
    public DemoService(){
       //注入的配置,不能在构造函数里使用。在生命周期时,构建先于注入
    }
    
    @Init
    public void init(){
        //注入的配置,需要进一步做初始化,请在处理
    }
}
  • 注入到配置器的构建参数(与注入字段的方式差不多)
@Configuration
public class DemoConfig{
    //提示:@Bean 只能与 @Configuration 配合
    @Bean 
    public DataSource db1(@Inject("${track.db1}") HikariDataSource ds) {
        return ds;
    }
    
    @Bean
    public DataSourceWrap db1w(@Inject DataSource ds, @Inject("${wrap}") WrapConfig wc) {
        return new DataSourceWrap(ds, wc);
    }
    
    //也可以带条件处理
    @Bean
    public CacheService cache(@Inject("${cache.enable}") boolean enable, 
                              @Inject("${cache.config}") CacheServiceSupplier supper){
        if(enable){
            return supper.get();
        }else{
            return null;
        }
    }
}

注意一下,配置名是通过${...}模式去表示的。

2、如何手动获得配置?

  • 给字段赋值
public class DemoService{
    //获取值(带默认值:demoApi)
    static String trackName = Solon.cfg().get("track.name", "demoApi");
    //获取值
    static String trackUrl = Solon.cfg().get("track.url");
    
    //获取配置集合
    Properties trackDbCfg = Solon.cfg().getProp("track.db1");
    //获取bean(根据配置集合自动生成)
    HikariDataSource trackDs = Solon.cfg().getBean("track.db1", HikariDataSource.class);
}
  • 构建Bean给配置器用
@Configuration
public class DemoConfig{
    @Bean
    public DataSource db1() {
        return Solon.cfg().getBean("track.db1", HikariDataSource.class);
    }
    
    @Bean
    public DataSourceWrap db1w(@Inject DataSource ds) {
        WrapConfig wc = Solon.cfg().getBean("wrap", WrapConfig.class);
        
        return new DataSourceWrap(ds, wc);
    }
}

标签:容器,track,手动,Bean,Inject,Solon2,db1,public,注入
From: https://www.cnblogs.com/noear/p/17114806.html

相关文章

  • Solon2 开发之容器,二、构建一个 Bean 的三种方式
    1、手动简单的构建://生成普通的BeanSolon.context().wrapAndPut(UserService.class,newUserServiceImpl());//生成带注解的Bean(比如:@Controller)Solon.context().be......
  • 容器部署分布式zabbix
    之前有写过docker-compose部署zabbix的博客这里再总结下分布式部署zabbix的笔记,这里重点是部署zabbix-proxy同样需要准备数据库配置文件数据库配置文件差不多这里是doc......
  • Docker consul的容器服务更新与发现
    一、Consul概述(1)什么是服务注册与发现服务注册与发现是微服务架构中不可或缺的重要组件。起初服务都是单节点的,不保障高可用性,也不考虑服务的压力承载,服务之间调用单纯的......
  • GitLab CICD Day 23 - 手动部署 Production 环境
    从开发到上线流程:部署到Prodvariables:user:ericpwd:Admin@1234harbor:http://172.16.128.215:8080image_hellocat:172.16.128.215:8080/hive/hellocatstages:......
  • #yyds干货盘点# LeetCode面试题:盛最多水的容器
    1.简述:给定一个长度为n的整数数组 height 。有 n 条垂线,第i条线的两个端点是 (i,0) 和 (i,height[i]) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可......
  • java 手动生成jni头文件(JNI静态注册)
    PS:要转载请注明出处,本人版权所有。PS:这个只是基于《我自己》的理解,如果和你的原则及想法相冲突,请谅解,勿喷。前置说明  本文作为本人csdnblog的主站的备份。(BlogID......
  • 【Docker】MySQL容器定时备份
    我们通常使用原生的mysql会比较多,mysql的备份也耳熟能详。假如现在有个mysql数据库username为root,password为123456,且现在要导出schema为db1、db2的数据。在本地导出的时候......
  • div、td 、p 等容器内强制换行和不换行的方法
    转载自:http://www.divcss5.com/html/h50327.shtml1、强制不换行,同时以省略号结尾。<divstyle="width:100px;overflow:hidden;white-space:nowrap;text-overflow:ellipsi......
  • ACP云原生容器工程师-ACK操作
    操作流程授权账号(RBAC/RAM)创建集群(专有版、托管版、serverless版)部署应用(镜像、模板)运维管理(运维集群、运维应用)集群创建集群查看查看集群的基本信息......
  • Linux手动启动、关闭、重启jar包相关shell脚本
    1、启动文件start.sh#!/bin/sh###APP_NAME=$(basename$(dirname"$PWD"))JAVA_OPTS="-Djava.awt.headless=true-Djava.net.preferIPv4Stack=true"JAVA_DEBUG_......