springboot配置和常用注解

配置加载顺序

1 SpringBoot配置文件可以放置在多种路径下,不同路径下的配置优先级有所不同。
可放置目录(优先级从高到低)
file:./config/ (当前项目路径(运行目录)的config目录下);
file:./ (当前项目路径);
classpath:/config/ (类路径config目录下);
classpath:/ (类路径config下).
2 运行只通过运行时参数 == --spring.config.path=/xxxx/config/ --spring.config.name=abc == 指定配置文件的目录和配置文件的名字(后缀为properties)
3

文件分块与合并

   //源文件
       File sourceFile = new File("E:\\test\\test.avi");
       //块文件目录
       String chunkFileFolder = "E:\\test\\chunks\\";

       //先定义块文件大小
       long chunkFileSize = 1 * 1024 * 1024;

       //块数
       long chunkFileNum = (long) Math.ceil(sourceFile.length() * 1.0 /chunkFileSize);

       //创建读文件的对象
       RandomAccessFile raf_read = new RandomAccessFile(sourceFile,"r");

       //缓冲区
       byte[] b = new byte[1024];
       for(int i=0;i<chunkFileNum;i++){
           //块文件
           File chunkFile = new File(chunkFileFolder+i);
           //创建向块文件的写对象
           RandomAccessFile raf_write = new RandomAccessFile(chunkFile,"rw");
           int len = -1;

           while((len = raf_read.read(b))!=-1){

               raf_write.write(b,0,len);
               //如果块文件的大小达到 1M开始写下一块儿
               if(chunkFile.length()>=chunkFileSize){
                   break;
               }
           }
           raf_write.close();


       }
       raf_read.close();
   //块文件目录
       String chunkFileFolderPath = "E:\\test\\chunks\\";
       //块文件目录对象
       File chunkFileFolder = new File(chunkFileFolderPath);
       //块文件列表
       File[] files = chunkFileFolder.listFiles();
       //将块文件排序,按名称升序
       List<File> fileList = Arrays.asList(files);
       Collections.sort(fileList, new Comparator<File>() {
           @Override
           public int compare(File o1, File o2) {
               if(Integer.parseInt(o1.getName())>Integer.parseInt(o2.getName())){
                   return 1;
               }
               return -1;

           }
       });

       //合并文件
       File mergeFile = new File("E:\\ffmpeg_test\\lucene_merge.avi");
       //创建新文件
       boolean newFile = mergeFile.createNewFile();

       //创建写对象
       RandomAccessFile raf_write = new RandomAccessFile(mergeFile,"rw");

       byte[] b = new byte[1024];
       for(File chunkFile:fileList){
           //创建一个读块文件的对象
           RandomAccessFile raf_read = new RandomAccessFile(chunkFile,"r");
           int len = -1;
           while((len = raf_read.read(b))!=-1){
               raf_write.write(b,0,len);
           }
           raf_read.close();
       }
       raf_write.close();

注解

Conditional 和 Condition

@Conditional 注解是 Spring 4.0 之后出的一个注解,与其搭配的一个接口是 Condition,@Conditional 注解会根据具体的条件决定是否创建 bean 到容器中,接下来看看 @Conditional 注解的简单使用

public interface HandlersBuilder {
	RouteRequestPipeline build();
}

@Conditional(VendorCondition.class)
@ConditionalOnVendor(vendor = "NG")
public class NGHandlersBuilder implements HandlersBuilder {
	@Override
	public RouteRequestPipeline build() {
		RouteRequestPipeline pipeline = new DefaultRouteRequestPipeline();
		//XXXX
		return pipeline;
	}
}

public class VendorCondition implements Condition {
	@Override
	public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
		try {
			AnnotationMetadataReadingVisitor v = (AnnotationMetadataReadingVisitor) metadata;
			ConditionalOnVendor vendor = Class.forName(v.getClassName()).getDeclaredAnnotation(ConditionalOnVendor.class);
			if(vendor != null && vendor.vendor() != null) {
				return vendor.vendor().equalsIgnoreCase(Config.getParameter("VENDOR"));
			}
		} catch (Exception e) {
		}
		return false;
	}
}

@Target({ ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
public @interface ConditionalOnVendor {
	String vendor();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值