• springboot08


    spring boot的这个做法很好,避免了传统的web应用来出错时,默认抛出异常,容易泄密。

    spring boot应用的maven打包过程

    先通过maven-shade-plugin生成一个包含依赖的jar,再通过spring-boot-maven-plugin插件把spring boot loader相关的类,还有MANIFEST.MF打包到jar里。

    spring boot里有颜色日志的实现

    当在shell里启动spring boot应用时,会发现它的logger输出是有颜色的,这个特性很有意思。

    可以通过这个设置来关闭:

    spring.output.ansi.enabled=false
    • 1

    原理是通过AnsiOutputApplicationListener ,这个来获取这个配置,然后设置logback在输出时,加了一个 ColorConverter,通过org.springframework.boot.ansi.AnsiOutput ,对一些字段进行了渲染。

    一些代码小技巧

    实现ClassLoader时,支持JDK7并行加载

    可以参考LaunchedURLClassLoader里的LockProvider

    public class LaunchedURLClassLoader extends URLClassLoader {
    
        private static LockProvider LOCK_PROVIDER = setupLockProvider();
        private static LockProvider setupLockProvider() {
            try {
                ClassLoader.registerAsParallelCapable();
                return new Java7LockProvider();
            }
            catch (NoSuchMethodError ex) {
                return new LockProvider();
            }
        }
    
        @Override
        protected Class<?> loadClass(String name, boolean resolve)
                throws ClassNotFoundException {
            synchronized (LaunchedURLClassLoader.LOCK_PROVIDER.getLock(this, name)) {
                Class<?> loadedClass = findLoadedClass(name);
                if (loadedClass == null) {
                    Handler.setUseFastConnectionExceptions(true);
                    try {
                        loadedClass = doLoadClass(name);
                    }
                    finally {
                        Handler.setUseFastConnectionExceptions(false);
                    }
                }
                if (resolve) {
                    resolveClass(loadedClass);
                }
                return loadedClass;
            }
        }

    检测jar包是否通过agent加载的

    InputArgumentsJavaAgentDetector,原理是检测jar的URL是否有”-javaagent:”的前缀。

    private static final String JAVA_AGENT_PREFIX = "-javaagent:";
    • 1

    获取进程的PID

    ApplicationPid,可以获取PID。

        private String getPid() {
            try {
                String jvmName = ManagementFactory.getRuntimeMXBean().getName();
                return jvmName.split("@")[0];
            }
            catch (Throwable ex) {
                return null;
            }
        }
  • 相关阅读:
    第63天python学习异常
    第62天python 学习TCP三次握手四次挥手详解
    文件操作
    内置函数
    函数递归
    函数补充
    函数
    购物车程序作业
    集合内置函数
    字典三级菜单
  • 原文地址:https://www.cnblogs.com/huaobin/p/14908817.html
Copyright © 2020-2023  润新知