Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过tomcat上下文文件和spring上下文声明数据源之间的区别_Spring_Performance_Tomcat7 - Fatal编程技术网

通过tomcat上下文文件和spring上下文声明数据源之间的区别

通过tomcat上下文文件和spring上下文声明数据源之间的区别,spring,performance,tomcat7,Spring,Performance,Tomcat7,在META-IF/context.xml文件中声明DataSource并使用JNDI查找从Springbean获取它(方法1),或者直接通过spring声明DataSource(方法2)之间有什么区别吗 我认为第二种方法更好,因为它没有绑定到specefic服务器,这意味着如果我们使用第一种方法,并且有一天迁移到另一台服务器,我们必须在第二台服务器中调整上下文文件的策略(不是真的?) 感谢第一种方法的一些要点(容器中定义的数据源的JNDI查找): 可以在不接触实际应用程序的情况下进行配置 可以

META-IF/context.xml
文件中声明
DataSource
并使用JNDI查找从Springbean获取它(方法1),或者直接通过spring声明
DataSource
(方法2)之间有什么区别吗

我认为第二种方法更好,因为它没有绑定到specefic服务器,这意味着如果我们使用第一种方法,并且有一天迁移到另一台服务器,我们必须在第二台服务器中调整上下文文件的策略(不是真的?)


感谢第一种方法的一些要点(容器中定义的数据源的JNDI查找):

  • 可以在不接触实际应用程序的情况下进行配置
  • 可以更好地保护敏感信息(如密码)
  • 数据源可以在同一服务器上的多个应用程序之间共享
出于安全(或“安全”)原因,我在需要时使用第一种方法——通常,客户的要求是DB访问的密码不能以纯文本形式存储在应用程序中。对此的一个可能的响应是根本不在应用程序中存储密码,而是让客户通过JNDI提供数据源

从系统管理的角度来看,这也是有意义的——如果需要重新配置数据源,很可能是由于某些基础结构或网络更改,因此重新配置数据源也应该由管理员负责(也是他们的责任)。servlet容器应该是这样的位置


如果我不需要上述任何方法,我将使用第二种方法(不太复杂,更易于部署)。

第一种方法的一些要点(容器中定义的数据源的JNDI查找):

  • 可以在不接触实际应用程序的情况下进行配置
  • 可以更好地保护敏感信息(如密码)
  • 数据源可以在同一服务器上的多个应用程序之间共享
出于安全(或“安全”)原因,我在需要时使用第一种方法——通常,客户的要求是DB访问的密码不能以纯文本形式存储在应用程序中。对此的一个可能的响应是根本不在应用程序中存储密码,而是让客户通过JNDI提供数据源

从系统管理的角度来看,这也是有意义的——如果需要重新配置数据源,很可能是由于某些基础结构或网络更改,因此重新配置数据源也应该由管理员负责(也是他们的责任)。servlet容器应该是这样的位置


如果我不需要上述任何一种方法,我将使用第二种方法(不太复杂,更易于部署)。

如果有多个应用程序使用您的数据库。我们可以在容器内配置
数据源
,而不是让每个应用程序管理其数据库配置,我们将让应用程序指向该共享配置。这也将帮助您在所有应用程序之间共享数据库连接池

对不起,我刚刚在SO中找到了类似的答案(否则我不会发布这个答案)

当您必须在两个应用程序之间移动应用程序时,JNDI真的会大放异彩 环境:从开发到集成再到测试再到生产。如果你 将每个应用程序服务器配置为使用相同的JNDI名称,您可以 每个环境中都有不同的数据库,无需更改 代码。您只需拿起WAR文件并将其放入新的 环境

这里还有一些其他的假设,这些假设在判断时非常重要 这个答案是:

我无法访问部署代码的服务器 所有,除了对日志的只读访问。写作和写作的人 打包代码的人与配置和管理代码的人不同 服务器。一旦一个WAR文件开始了它的PROD之旅,它就不能被删除 没有回到开始就再次改变了。任何测试都有问题吗 如果WAR被更改,则必须在测试服务器上由QA完成。 也许你看不到这一好处,因为你是一个孤独的开发人员 在本地桌面上编写代码并部署到生产环境


来源:

如果有多个应用程序使用您的数据库。我们可以在容器内配置
数据源
,而不是让每个应用程序管理其数据库配置,我们将让应用程序指向该共享配置。这也将帮助您在所有应用程序之间共享数据库连接池

对不起,我刚刚在SO中找到了类似的答案(否则我不会发布这个答案)

当您必须在两个应用程序之间移动应用程序时,JNDI真的会大放异彩 环境:从开发到集成再到测试再到生产。如果你 将每个应用程序服务器配置为使用相同的JNDI名称,您可以 每个环境中都有不同的数据库,无需更改 代码。您只需拿起WAR文件并将其放入新的 环境

这里还有一些其他的假设,这些假设在判断时非常重要 这个答案是:

我无法访问部署代码的服务器 所有,除了对日志的只读访问。写作和写作的人 打包代码的人与配置和管理代码的人不同 服务器。一旦一个WAR文件开始了它的PROD之旅,它就不能被删除 没有回到开始就再次改变了。任何测试都有问题吗 如果WAR被更改,则必须在测试服务器上由QA完成。 也许你看不到这一好处,因为你是一个孤独的开发人员 在本地桌面上编写代码并部署到生产环境

来源:

这与标签“性能”有什么关系?Hello@JiriT
@Bean(destroyMethod = "close")
DataSource dataSource(Environment env) {
    HikariConfig dataSourceConfig = new HikariConfig();
    dataSourceConfig.setDriverClassName(env.getRequiredProperty(PROPERTY_NAME_DB_DRIVER_CLASS));
    dataSourceConfig.setJdbcUrl(env.getRequiredProperty(PROPERTY_NAME_DB_URL));
    dataSourceConfig.setUsername(env.getRequiredProperty(PROPERTY_NAME_DB_USER));
    dataSourceConfig.setPassword(env.getRequiredProperty(PROPERTY_NAME_DB_PASSWORD));

    return new HikariDataSource(dataSourceConfig);
}