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;
            }
        }
  • 相关阅读:
    单例模式及C++实现代码
    Nginx学习笔记4 源码分析
    探讨C++ 变量生命周期、栈分配方式、类内存布局、Debug和Release程序的区别2
    SVM学习资料
    11 款最好 CSS 框架
    发布Activex全过程
    Integer.parseInt(String s, int radix)方法介绍(修正版)
    Windows 各种计时函数总结(QueryPerformanceCounter可以达到微秒)
    不断摸索发现用 andy 模拟器很不错,感觉跟真机差不多
    Qt中提高sqlite的读写速度(使用事务一次性写入100万条数据)
  • 原文地址:https://www.cnblogs.com/huaobin/p/14908817.html
Copyright © 2011-2022 走看看