git删除某个文件的提交记录

发现不小心提交了包含密码的文件,所以记录下删除该文件及记录的方法

git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch src/main/resources/application.properties' --prune-empty --tag-name-filter cat -- --all

src/main/resources/application.properties为该文件,替换成需要的文件即可。

如果提示:Cannot rewrite branches: Your index contains uncommitted changes.

则需要:

git stash

最后提交到git:

git push origin --force --all

Kotlin笔记

  1. by lazy :赖加载,在调用时才会初始化
  2. 单例模式、初始化、带参构造方法: git
  3. 初始化ViewModel时
ViewModelProvider.of(this).get(CrimeListViewModel::class.java)

该方法在lifecycle升级到2.x以后已被抛弃使用,可改为 (git):

       ViewModelProvider.AndroidViewModelFactory.getInstance(context?.applicationContext as Application).create(CrimeListViewModel::class.java)

4.set和get使用就是在方法/变量下直接使用get()和set() : git

Ubuntu创建LVM磁盘及扩容

一、创建lvm

1、安装lvm2

 apt install lvm2

格式化成lvm2 pv分区

2、创建vg

vgcreate vg名字 pv分区名

3、创建lv

lvcreate -L 大小 -n 挂载点 vg盘名字

然后去磁盘里去格式化并挂载到目录

二、扩容

同上到创建成pv分区

追加vg

vgextend disk_nas /dev/sdd1
vgextend vg名字 新磁盘vg分区名

追加到挂载目录

lvextend -l +100%FREE 挂载点

重载分区

resize2fs /dev/disk_nas/disk_lvm

参考文章:

https://blog.csdn.net/w670165403/article/details/82081773

https://blog.csdn.net/hybaym/article/details/104991353

SpringBoot扫描注册注解

有个小需求是扫描在SpringBoot 注册的RequestMapping接口地址,可以先扫描所有使用Controller注解的类,然后获取他们的方法,判断使用的RequestMapping注解,再获取value,就能拿到接口地址了。下面为代码片段

    /**
     * 扫描使用注解的类
     * @param packageName 扫描包名
     * @param annotation 注解类
     * @return 扫描到的集合
     */
    public static List<class> scanClass(String packageName, Class annotation) {
        List<class> classList = new ArrayList&lt;>();
        if (ObjectUtils.isEmpty(packageName)) {
            return classList;
        }
        ClassPathScanningCandidateComponentProvider provider = new ClassPathScanningCandidateComponentProvider(false);
        TypeFilter includeFilter = (metadataReader, metadataReaderFactory) -> true;
        provider.addIncludeFilter(includeFilter);
        Set<beandefinition> beanDefinitionSet = new HashSet&lt;>();
        // 指定扫描的包名
        Set<beandefinition> candidateComponents = provider.findCandidateComponents(packageName);
        beanDefinitionSet.addAll(candidateComponents);

        beanDefinitionSet.forEach(beanDefinition -> {
            try {
                Class clazz = Class.forName(beanDefinition.getBeanClassName());

                if (!ObjectUtils.isEmpty(annotation)) {
                    if (!ObjectUtils.isEmpty(AnnotationUtils.getAnnotation(clazz, annotation))) {
                        classList.add(clazz);
                    }
                } else {
                    classList.add(clazz);
                }
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
//            System.out.println(definition.getBeanClassName());
        });
        return classList;
    }

    /**
     * 获取Url
     * @param packageName 扫描包名
     * @param className 指定类,如无指定类,为null即可
     * @return url集合
     */
    public static List<string> getUrls(String packageName,String className){
        List<class> list= scanClass(packageName, Controller.class);
        List<string> urls=new ArrayList&lt;>();
        for (Class aClass : list) {
            if(className!=null&amp;&amp;!aClass.getSimpleName().equals(className)){
                continue;
            }
            Method[] methods= aClass.getDeclaredMethods();
            for (Method method : methods) {
                RequestMapping ls=method.getAnnotation(RequestMapping.class);
                if(ls!=null) {
                    urls.add(ls.value()[0]);
                }
            }
        }
        return urls;
    }