【Java愚公】org.aeonbits.owner使用

org.aeonbits.owner使用

基础知识

1、定义
    Owner是一个java库,其目标是通过java属性文件来最小化处理应用程序的代码。
    说人话:
        以注解的方式来简化属性配置。
 
2、引入依赖
    g:org.aeonbits.owner
    a:owner    
    v:1.0.9
   以上适用于java1.7及之前的jdk版本,java1.8时a坐标应该是owner-java8
 
3、使用
    A、接口继承Config。
    B、接口上添加@Config.Sources({属性文件1[,属性文件2....]})
         注意:如果接口和属性文件在同一个包下且同名,则不同添加这个注解。但是这个属性文件必须定义            
         为资源文件且指定编译路径。 
            接口名:SparkConfig    属性文件名:SparkConfig.properties  这叫同名
    C、接口中定义具有返回值的无参方法,方法上使用@Key("属性文件中属性的key")即可注入属性文件中属
        性的value。
        注意:若接口和属性文件在同一个包下且同名,则接口内方法会自动获取属性文件同名key的                
        value值,不需要使用@Key注解。
    D、接口中定义具有返回值的无参方法,方法上使用@DefaultValue("默认值")可给成员属性定义默认                                
        值,当属性文件无法提供value注入的时候,成员属性的值就是默认值。
        注意:如果没有默认值,属性文件中又无法找到可以注入的value,返回值为String类型返回null,                            
        int等基本类型返回空指针异常。
    E、除了属性文件中配置属性key-value外,还可以通过Properties ps=new Properties();
        ps.setProperties("key","value");方式来配置key-value。
 
    F、在配置类中通过:
    public static final SparkConfig=ConfigFactoy.create(SparkConfig.class);创建对象spark,        
    而spark对象则拥有属性文件中所有属性key的value值。通过spark.方法名即可获取。
        当属性是通过Properties类引入时,创建spark对象还有第二个参数, 即Properties类的对象。
 
 
2、Owner的几个常见功能
A、加载策略
    @Config.Sources({classpath:a.properties,classpath:b.properties})   
   
    加载策略有FIRST(默认)和MERGE两种,可以在接口上通过@LoadPolicy(LoadType.FIRST)进行配置。 
 
    FIRST:找到了a.properties则使用a.properties,否则尝试找b.properties,找到了就使用 
    b.properties。如果b.properties也没找到,就使用@DefaultValue中的默认值。
 
    MERGE:找到了a.properties则使用a.properties,当接口内有方法无法注入value时则尝试在        
    b.properties中寻找value注入,若b.properties也无法提供注入,则该方法就使用@DefaultValue中 
    的默认值,而其他的方法则依然使用a.properties进行注入。
 
 
B、类型转换
    如果要注入的value值是集合&数组等数据结构,则value值应当以逗号分隔。如果不是,可以通过
    @Separator("-")注解指定分隔符。
    如果分隔原则非常复杂,则可以定义个继承Tokenizer的分隔符,在抽象方法上@TokenizerClass("分隔    
    类类对象");来引入复杂的分割原则。
 
C、变量扩张 
    属性文件中属性A的value中可以通过${B}来应用属性文件中属性B的value。
 
D、热加载
    在接口上中添加@HotReload,当属性文件的值改变时,会重新加载属性文件。
    当然啦,@Config.Sources()中配置的属性文件必须以"file:""classpath:""jar:"开头,
    “ftp:”、“http:”这种就不行。
    @HotReload默认重新加载时间间隔为5s,可以@HotReload(5)配置。

使用代码

FlexppExtConfig .java

import org.aeonbits.owner.Config;
import org.aeonbits.owner.Config.LoadPolicy;
import org.aeonbits.owner.Config.LoadType;
import org.aeonbits.owner.Config.Sources;
import org.aeonbits.owner.Config.HotReload;
import org.aeonbits.owner.ConfigFactory;

import java.util.Map;

@HotReload(1)
@LoadPolicy(LoadType.FIRST)
@Sources({"file:${user.dir}/config/MdlpConfig.properties", "classpath:MdlpConfig.properties"})
public interface MdlpConfig extends Config {
    MdlpConfig INSTANCE = (MdlpConfig) ConfigFactory.create(MdlpConfig.class, new Map[0]);

    @DefaultValue("")
    String ldapUrl();

}

TestController.java

import com.hanhe.mdlp.system.config.MdlpConfig;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@RequestMapping("/test")
public class TestController {

    @GetMapping("test")
    @ResponseBody
    public Object test(){
        //获取配置项中的ldapUrl
        String ldapUrl = MdlpConfig.INSTANCE.ldapUrl();
        return ldapUrl;
    }

}

测试

访问http://localhost:8808/test/test
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Maven的pom.xml是一个XML文件,用于描述Maven项目的配置信息,包括项目的依赖关系、构建过程、打包方式、插件等等。 该文件通常位于项目根目录下,文件名为pom.xml。在该文件,可以指定项目的基本信息,如项目名称、版本号、作者、许可证等;定义项目的依赖关系,通过依赖管理机制可以自动下载和管理所需的依赖库;配置构建过程,定义构建的目标、输出文件的路径和名称等;以及配置插件,用于扩展构建过程。 举个例子,以下是一个简单的pom.xml文件: ``` <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId> <artifactId>my-app</artifactId> <version>1.0.0</version> <dependencies> <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>30.1-jre</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>3.2.0</version> <configuration> <archive> <manifest> <addClasspath>true</addClasspath> <mainClass>com.example.App</mainClass> </manifest> </archive> </configuration> </plugin> </plugins> </build> </project> ``` 该文件定义了一个名为"my-app"的项目,依赖于Google Guava库,并使用Maven Jar插件将项目打包为可执行的Jar文件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java愚公

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值