在Spring中配置MongoDB时,参考sais:
像这样注册MongoDB:
@Configuration
public class AppConfig {
/*
* Use the standard Mongo driver API to create a com.mongodb.Mongo instance.
*/
public @Bean Mongo mongo() throws UnknownHostException {
return new Mongo("localhost");
}
}
Run Code Online (Sandbox Code Playgroud)
使用UnknownHostException检查异常来污染代码.使用checked异常是不可取的,因为基于Java的bean元数据使用方法作为设置对象依赖性的手段,使调用代码变得混乱.
所以春天提出
@Configuration
public class AppConfig {
/*
* Factory bean that creates the com.mongodb.Mongo instance
*/
public @Bean MongoFactoryBean mongo() {
MongoFactoryBean mongo = new MongoFactoryBean();
mongo.setHost("localhost");
return mongo;
}
}
Run Code Online (Sandbox Code Playgroud)
但不幸的是,自从Spring-Data-MongoDB 1.7 MongoFactoryBean被弃用并被MongoClientFactoryBean取代.
所以
@Bean
public MongoClientFactoryBean mongoClientFactoryBean() {
MongoClientFactoryBean factoryBean = …Run Code Online (Sandbox Code Playgroud) 我想完全理解有关 min/med/max 信息的含义。
例如:
scan time total(min, med, max)
34m(3.1s, 10.8s, 15.1s)
Run Code Online (Sandbox Code Playgroud)
平均所有核心的扫描时间最短为 3.1 秒,最长为 15.1 秒,累计总时间长达 34 分钟,对吗?
然后对于
data size total (min, med, max)
8.2GB(41.5MB, 42.2MB, 43.6MB)
Run Code Online (Sandbox Code Playgroud)
意味着所有核心的最大使用量是 43.6MB,最小使用量是 41.5MB,对吧?
所以同样的逻辑,对于左边的排序步骤,每个核心使用了 80MB 的 RAM。
现在,执行器有 4 个核心和 6G RAM,根据 metrix,我认为已经预留了很多 RAM,因为每个核心最多可以使用 1G 左右的 RAM。所以我想尝试减少分区数量并强制每个执行器处理更多数据并减少shuffle大小,您认为理论上可能吗?
对于基于springframwork的应用程序,使用xml声明bean时,可以通过传递唯一值甚至参数来配置bean id,然后在运行时解析该值。
现在我希望将所有xml配置替换为java注释。
假设我想创建两个具有不同 id 的数据库 bean。
bean.xml
<bean id="A.database" class="org.apache.commons.dbcp.BasicDataSource">
<!-- collaborators and configuration for this bean go here -->
</bean>
<bean id="B.database" class="org.apache.commons.dbcp.BasicDataSource">
<!-- collaborators and configuration for this bean go here -->
</bean>
Run Code Online (Sandbox Code Playgroud)
然后我将上面的代码优化为一个具有两个应用程序的两个属性文件的bean
bean.xml
<bean id="${appName.database}" class="org.apache.commons.dbcp.BasicDataSource">
<!-- collaborators and configuration for this bean go here -->
</bean>
applicationA.properties
appName.database=A.database
applicationB.properties
appName.database=B.database
Run Code Online (Sandbox Code Playgroud)
整个应用程序由“框架”模块组成,该模块提供每个应用程序通用的bean,如数据库bean、jdbcTemplate bean,以及“应用程序”模块,该模块为占位符提供属性值并使用唯一id初始化bean。所以即使我同时启动多个应用程序,它们也会从上下文中找到相应的bean。
一般来说,我希望做到
@Bean(name = "${beanName}")
public ABean getBean() {}
Run Code Online (Sandbox Code Playgroud)
并在应用程序级别解析 ${beanName}。
spring ×2
apache-spark ×1
bigdata ×1
java ×1
mongodb ×1
performance ×1
spark-ui ×1
spring-data ×1