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)配置。

 

测试代码

 配置文件MyOwner.properties:
    name=lily



接口:

package com.Bowner;

import org.aeonbits.owner.Config;

@Config.Sources({"classpath:MyOwner.properties"})
public interface MyOwner extends Config {

    @Key("name")  //属性文件有name的key-value,可以直接注入value
    String name();  

    @DefaultValue("7")  //属性文件没有id的key-value,无法注入value,采用默认值
    int id();

    String address();  //属性文件没有id的key-value,且没有默认值,输出null

    double score(); 属性文件没有id的key-value,且没有默认值,输出空指针异常
}




测试类:
package com.Bowner;

import org.aeonbits.owner.ConfigFactory;

public class OwnerTest {

    public static final MyOwner mo= ConfigFactory.create(MyOwner.class);

    public static void main(String[] args) {
        System.out.println(mo.name());
        System.out.println(mo.id());
        System.out.println(mo.address());
        System.out.println(mo.score());
    }

}


输出结果:

lily
7
null
Exception in thread "main" java.lang.NullPointerException
	at com.sun.proxy.$Proxy5.score(Unknown Source)
	at com.Bowner.OwnerTest.main(OwnerTest.java:13)




























 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
org.apache.hadoop.fs.FileUtil是Hadoop中的一个工具类,提供了一些常用的文件操作方法。下面是该类中一些常用方法的详解: 1. copy(FileSystem srcFS, Path src, FileSystem dstFS, Path dst, boolean deleteSource, Configuration conf):将一个文件从源文件系统复制到目标文件系统。如果deleteSource为true,则在复制成功后删除源文件。 2. listFiles(File dir):列出指定目录下的所有文件和子目录。返回值是一个File数组。 3. symlink(File target, File link):在link位置创建一个指向target的符号链接。该方法只在支持符号链接的文件系统上可用。 4. copyMerge(FileSystem srcFS, Path srcDir, FileSystem dstFS, Path dstFile, boolean deleteSource, Configuration conf, String addString):将指定目录下的所有文件合并成一个文件,并将结果存储在dstFile中。如果deleteSource为true,则在合并成功后删除源文件。addString参数是可选的,用于在每个文件之间添加一个字符串。 5. chmod(File path, String perm):更改指定路径的权限。perm参数是一个八进制数字,如“755”。 6. chown(File path, String owner, String group):更改指定路径的所有者和组。owner和group参数都是字符串类型。 7. getDU(File dir):计算指定目录中所有文件和子目录的总大小。返回值是一个long类型的数字,表示文件大小。 8. symLinkTarget(File link):返回指向指定符号链接的目标文件路径。如果link不是一个符号链接,则返回null。 9. setWritable(File path, boolean writable):设置指定路径的可写权限。 10. setReadable(File path, boolean readable):设置指定路径的可读权限。 11. setExecutable(File path, boolean executable):设置指定路径的可执行权限。 这些方法是org.apache.hadoop.fs.FileUtil类中的一部分,可以帮助你实现一些常见的文件操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

二百四十九先森

你的打赏是我努力的最大动力~

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

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

打赏作者

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

抵扣说明:

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

余额充值