【问题标题】:Java WebApp and tomcat context.xmlJava WebApp 和 tomcat context.xml
【发布时间】:2015-09-09 12:43:32
【问题描述】:

我构建 webApp 。当我从 Eclipse 运行应用程序时,一切正常。现在我构建 WAR 文件,放入 tomcat 根目录,并且我想将我所有的系统属性放入 tomcat 中的 context.xml 中。然后,当应用程序启动时,context.xml 中的值被读取并在应用程序中使用。 问题是我不知道如何在我的 web 应用程序中从 context.xml 获取值? 这是上下文:

<?xml version="1.0" encoding="UTF-8"?>
<Context path="" docBase="fileupload.war" privileged="true"    antiResourceLocking="false" antiJARLocking="false">
    <Resource 
        mail.smtp_server = "127.0.0.1"
        mail.smtp_username = "no-reply@gmail.rs"
        mail.mailTo = "test@gmail.com"
        rootFolder = "D:/project/"
        rootFolderBackup = "D:/project/Backup/"
     />

这里我想从 context.xml 中获取一个值:

@RequestMapping(value="api/files")
public class FileController {

final static Logger logger = Logger.getLogger(FileController.class);
@Autowired
ApplicationContext applicationContext;

private String mailTo;
private String sender;
private String rootFolder = "";
private String rootFolderBackup = "";   

@PostConstruct
private void init(){

        try {
            InitialContext ic = new InitialContext();
            Context xmlContext = (Context) ic.lookup("java:comp/env"); // thats everything from the context.xml and from the global configuration
            DataSource myDatasource = (DataSource) xmlContext.lookup("rootFolder");
        } catch (NamingException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }

}

这是常见错误:

Name [rootFolder] is not bound in this Context. Unable to find [rootFolder].

我尝试了一些我在网上找到但不起作用的解决方案...... 我的 context.xml 文件在 C:\tomcat-7.0\conf\Catalina\localhost ,war 文件在 C:\tomcat-7.0\webapps

【问题讨论】:

    标签: java xml spring tomcat web-applications


    【解决方案1】:

    如果您想定义应用程序属性,您可能应该改用环境变量。例如,您可以像这样在任何 context.xml 中设置变量:

    <Environment name="PROPERTIES_FILE" override="false" type="java.lang.String" value="C:/path/to/propfile.properties" />
    <!--define more variables here -->
    

    然后在您的应用程序中,您可以像这样从 JNDI 读取这些环境属性。

    initCtx = new InitialContext();
    String path = (String) initCtx.lookup("java:comp/env/PROPERTIES_FILE");
    // fetch more variables here
    

    进一步阅读:

    https://tomcat.apache.org/tomcat-8.0-doc/config/context.html#Environment_Entries

    https://tomcat.apache.org/tomcat-8.0-doc/jndi-resources-howto.html

    【讨论】:

    • 我将 Environment 放入 Context 但现在出现错误:Name [PROPERTIES_FILE] is not bound in this Context. Unable to find [PROPERTIES_FILE].,在 java init() 中我将您的代码放入 InitialContext initCtx = new InitialContext(); String path = (String) initCtx.lookup("java:comp/env/PROPERTIES_FILE");
    • 不能说在您的特定情况下出了什么问题,“在我的机器上工作”,这就是它的记录方式。可能您将 context.xml 放在错误的位置。
    • 在哪里放置 Environment ,在来自 tomcat 的 context.xml 或 mywebapp.xml(在 tomcat / conf/catalina/localhost 文件夹中?
    猜你喜欢
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 2012-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-07
    • 2013-02-28
    相关资源
    最近更新 更多