zoukankan      html  css  js  c++  java
  • 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;
            }
        }
  • 相关阅读:
    7-22 朋友圈(25 分)
    c++之函数重载
    c++之函数的其它用法
    c++之引用
    c++之内存模型
    c++实例之通讯录管理系统之清空联系人功能(七)
    c++实例之通讯录管理系统之修改联系人功能(六)
    c++实例之通讯录管理系统之查找联系人功能(五)
    c++实例之通讯录管理系统之删除联系人功能(四)
    c++实例之通讯录管理系统之显示联系人功能(三)
  • 原文地址:https://www.cnblogs.com/huaobin/p/14908817.html
Copyright © 2011-2022 走看看