• catalina.properties


    追踪

    startup.bat

    set "EXECUTABLE=%CATALINA_HOME%incatalina.bat"
    call "%EXECUTABLE%" start %CMD_LINE_ARGS%

    catalina.bat

    set MAINCLASS=org.apache.catalina.startup.Bootstrap

    源码

    搜索 catalina.properties

    出现在CatalinaProperties.java 中

        static {
    
            loadProperties();
    
        }

    读取指定名称【catalina.properties】文件流,生成 Properties 对象,设置到System 环境变量中

            if ((is == null) || (error != null)) {
                // Do something
                log.warn("Failed to load catalina.properties", error);
                // That's fine - we have reasonable defaults.
                properties=new Properties();
            }
    
            // Register the properties as system properties
            Enumeration<?> enumeration = properties.propertyNames();
            while (enumeration.hasMoreElements()) {
                String name = (String) enumeration.nextElement();
                String value = properties.getProperty(name);
                if (value != null) {
                    System.setProperty(name, value);
                }
            }

    至此,可知 ,catalina.properties 配置的是系统变量

    应用

    catalina.properties

    # Licensed to the Apache Software Foundation (ASF) under one or more
    # contributor license agreements.  See the NOTICE file distributed with
    # this work for additional information regarding copyright ownership.
    # The ASF licenses this file to You under the Apache License, Version 2.0
    # (the "License"); you may not use this file except in compliance with
    # the License.  You may obtain a copy of the License at
    #
    #     http://www.apache.org/licenses/LICENSE-2.0
    #
    # Unless required by applicable law or agreed to in writing, software
    # distributed under the License is distributed on an "AS IS" BASIS,
    # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    # See the License for the specific language governing permissions and
    # limitations under the License.
    
    #
    # List of comma-separated packages that start with or equal this string
    # will cause a security exception to be thrown when
    # passed to checkPackageAccess unless the
    # corresponding RuntimePermission ("accessClassInPackage."+package) has
    # been granted.
    package.access=sun.,org.apache.catalina.,org.apache.coyote.,org.apache.jasper.,
    org.apache.naming.resources.,org.apache.tomcat.
    #
    # List of comma-separated packages that start with or equal this string
    # will cause a security exception to be thrown when
    # passed to checkPackageDefinition unless the
    # corresponding RuntimePermission ("defineClassInPackage."+package) has
    # been granted.
    #
    # by default, no packages are restricted for definition, and none of
    # the class loaders supplied with the JDK call checkPackageDefinition.
    #
    package.definition=sun.,java.,org.apache.catalina.,org.apache.coyote.,
    org.apache.jasper.,org.apache.naming.,org.apache.tomcat.
    
    #
    #
    # List of comma-separated paths defining the contents of the "common"
    # classloader. Prefixes should be used to define what is the repository type.
    # Path may be relative to the CATALINA_HOME or CATALINA_BASE path or absolute.
    # If left as blank,the JVM system loader will be used as Catalina's "common"
    # loader.
    # Examples:
    #     "foo": Add this folder as a class repository
    #     "foo/*.jar": Add all the JARs of the specified folder as class
    #                  repositories
    #     "foo/bar.jar": Add bar.jar as a class repository
    common.loader=${catalina.base}/lib,${catalina.base}/lib/*.jar,${catalina.home}/lib,${catalina.home}/lib/*.jar
    
    #
    # List of comma-separated paths defining the contents of the "server"
    # classloader. Prefixes should be used to define what is the repository type.
    # Path may be relative to the CATALINA_HOME or CATALINA_BASE path or absolute.
    # If left as blank, the "common" loader will be used as Catalina's "server"
    # loader.
    # Examples:
    #     "foo": Add this folder as a class repository
    #     "foo/*.jar": Add all the JARs of the specified folder as class
    #                  repositories
    #     "foo/bar.jar": Add bar.jar as a class repository
    server.loader=
    
    #
    # List of comma-separated paths defining the contents of the "shared"
    # classloader. Prefixes should be used to define what is the repository type.
    # Path may be relative to the CATALINA_BASE path or absolute. If left as blank,
    # the "common" loader will be used as Catalina's "shared" loader.
    # Examples:
    #     "foo": Add this folder as a class repository
    #     "foo/*.jar": Add all the JARs of the specified folder as class
    #                  repositories
    #     "foo/bar.jar": Add bar.jar as a class repository
    # Please note that for single jars, e.g. bar.jar, you need the URL form
    # starting with file:.
    shared.loader=
    # List of JAR files that should not be scanned using the JarScanner
    # functionality. This is typically used to scan JARs for configuration
    # information. JARs that do not contain such information may be excluded from
    # the scan to speed up the scanning process. This is the default list. JARs on
    # this list are excluded from all scans. Scan specific lists (to exclude JARs
    # from individual scans) follow this. The list must be a comma separated list of
    # JAR file names.
    # The JARs listed below include:
    # - Tomcat Bootstrap JARs
    # - Tomcat API JARs
    # - Catalina JARs
    # - Jasper JARs
    # - Tomcat JARs
    # - Common non-Tomcat JARs
    # - Test JARs (JUnit, Cobertura and dependencies)
    tomcat.util.scan.DefaultJarScanner.jarsToSkip=
    bootstrap.jar,commons-daemon.jar,tomcat-juli.jar,
    annotations-api.jar,el-api.jar,jsp-api.jar,servlet-api.jar,websocket-api.jar,
    catalina.jar,catalina-ant.jar,catalina-ha.jar,catalina-tribes.jar,
    jasper.jar,jasper-el.jar,ecj-*.jar,
    tomcat-api.jar,tomcat-util.jar,tomcat-coyote.jar,tomcat-dbcp.jar,
    tomcat-jni.jar,tomcat-spdy.jar,
    tomcat-i18n-en.jar,tomcat-i18n-es.jar,tomcat-i18n-fr.jar,tomcat-i18n-ja.jar,
    tomcat-juli-adapters.jar,catalina-jmx-remote.jar,catalina-ws.jar,
    tomcat-jdbc.jar,
    tools.jar,
    commons-beanutils*.jar,commons-codec*.jar,commons-collections*.jar,
    commons-dbcp*.jar,commons-digester*.jar,commons-fileupload*.jar,
    commons-httpclient*.jar,commons-io*.jar,commons-lang*.jar,commons-logging*.jar,
    commons-math*.jar,commons-pool*.jar,
    jstl.jar,taglibs-standard-spec-*.jar,
    geronimo-spec-jaxrpc*.jar,wsdl4j*.jar,
    ant.jar,ant-junit*.jar,aspectj*.jar,jmx.jar,h2*.jar,hibernate*.jar,httpclient*.jar,
    jmx-tools.jar,jta*.jar,log4j.jar,log4j-1*.jar,mail*.jar,slf4j*.jar,
    xercesImpl.jar,xmlParserAPIs.jar,xml-apis.jar,
    junit.jar,junit-*.jar,hamcrest*.jar,org.hamcrest*.jar,ant-launcher.jar,
    cobertura-*.jar,asm-*.jar,dom4j-*.jar,icu4j-*.jar,jaxen-*.jar,jdom-*.jar,
    jetty-*.jar,oro-*.jar,servlet-api-*.jar,tagsoup-*.jar,xmlParserAPIs-*.jar,
    xom-*.jar
    
    # Additional JARs (over and above the default JARs listed above) to skip when
    # scanning for Servlet 3.0 pluggability features. These features include web
    # fragments, annotations, SCIs and classes that match @HandlesTypes. The list
    # must be a comma separated list of JAR file names.
    org.apache.catalina.startup.ContextConfig.jarsToSkip=
    
    # Additional JARs (over and above the default JARs listed above) to skip when
    # scanning for TLDs. The list must be a comma separated list of JAR file names.
    org.apache.catalina.startup.TldConfig.jarsToSkip=tomcat7-websocket.jar
    
    #
    # String cache configuration.
    tomcat.util.buf.StringCache.byte.enabled=true
    #tomcat.util.buf.StringCache.char.enabled=true
    #tomcat.util.buf.StringCache.trainThreshold=500000
    #tomcat.util.buf.StringCache.cacheSize=5000

     -------------- 实际运用 start -------------

    设置classloader

    shared.loader=${catalina.base}/conf/yourbuzz

    yourbuzz 文件夹下

     activemq.properties
     log4j.properties
    yourbuzz.properties

    ----------------实际运用 end ----------------

    源码中关于 classloader

        ClassLoader commonLoader = null;
        ClassLoader catalinaLoader = null;
        ClassLoader sharedLoader = null;

    创建common.loader , server.loader , shared.loader

        private void initClassLoaders() {
            try {
                commonLoader = createClassLoader("common", null);
                if( commonLoader == null ) {
                    // no config file, default to this loader - we might be in a 'single' env.
                    commonLoader=this.getClass().getClassLoader();
                }
                catalinaLoader = createClassLoader("server", commonLoader);
                sharedLoader = createClassLoader("shared", commonLoader);
            } catch (Throwable t) {
                handleThrowable(t);
                log.error("Class loader creation threw exception", t);
                System.exit(1);
            }
        }
    private ClassLoader createClassLoader(String name, ClassLoader parent)
            throws Exception {
    
            String value = CatalinaProperties.getProperty(name + ".loader");
            if ((value == null) || (value.equals("")))
                return parent;
    
            value = replace(value);
    
            List<Repository> repositories = new ArrayList<Repository>();
    
            StringTokenizer tokenizer = new StringTokenizer(value, ",");
            while (tokenizer.hasMoreElements()) {
                String repository = tokenizer.nextToken().trim();
                if (repository.length() == 0) {
                    continue;
                }
    
                // Check for a JAR URL repository
                try {
                    @SuppressWarnings("unused")
                    URL url = new URL(repository);
                    repositories.add(
                            new Repository(repository, RepositoryType.URL));
                    continue;
                } catch (MalformedURLException e) {
                    // Ignore
                }
    
                // Local repository
                if (repository.endsWith("*.jar")) {
                    repository = repository.substring
                        (0, repository.length() - "*.jar".length());
                    repositories.add(
                            new Repository(repository, RepositoryType.GLOB));
                } else if (repository.endsWith(".jar")) {
                    repositories.add(
                            new Repository(repository, RepositoryType.JAR));
                } else {
                    repositories.add(
                            new Repository(repository, RepositoryType.DIR));
                }
            }
    
            return ClassLoaderFactory.createClassLoader(repositories, parent);
        }

    ps: catalina.properties 都用在哪里了?

        private SecurityConfig(){
            try{
                packageDefinition = CatalinaProperties.getProperty("package.definition");
                packageAccess = CatalinaProperties.getProperty("package.access");
            } catch (java.lang.Exception ex){
                if (log.isDebugEnabled()){
                    log.debug("Unable to load properties using CatalinaProperties", ex);
                }
            }
        }
     String value = CatalinaProperties.getProperty(name + ".loader");

    ps:tomee 中 关于classloader的解释

    common.loader

    Customizable in conf/catalina.properties, the common loader is the Tomcat classloader

    shared.loader

    Optional layer where you can add libraries for the web applications not seen by Tomcat. It is generally not used and not encouraged since Tomcat 6

    webapp1

    loader of one of your wars, it container WEB-INF/classes, WEB-INF/lib/.jar

    webapp2

    loader of another one of your wars, it container WEB-INF/classes, WEB-INF/lib/.jar

    application1

    loader of another application, it can be an ear, it contains lib and ejbmodules of the ear

    earwebapp1

    loader of one of the wars of the ear

    earwebapp2

    loader of the other webapp of the ear

  • 相关阅读:
    Android 自定义title样式
    HDU 3094 A tree game 树删边游戏
    设计模式学习笔记观察者模式
    [Unity-7] Update和FixedUpdate
    一淘搜索网页抓取系统的分析与实现(3)—scrapy+webkit &amp; mysql+django
    POJ 1947 树DP获得冠军
    linux 下一个 jira-6.3.6 组态 皴 翻译 迁移数据库
    阐述linux IPC(五岁以下儿童):system V共享内存
    使用OpenCV玩家营造出一个视频控制(没有声音)
    Swift编程语言学习4.1——周期
  • 原文地址:https://www.cnblogs.com/zno2/p/5968748.html
Copyright © 2020-2023  润新知