Spring 使用 Morphia 启动配置?

Spring Boot configuration with Morphia?

我不想使用 Spring DATA MongoDB 支持。 我想利用名为 Morphia 的 MongoDB 的 ORM。

https://github.com/mongodb/morphia

我想用 Spring Boot 配置 Morphia。我想以遵循 Spring 引导哲学的方式将 Morphia 的配置外部化。

我想利用环境变量来配置 Morphia 属性。

实现此目的的 Spring 引导方法是什么?

在一个简单的主程序中,将执行以下操作以使 Morhpia ORM 正常工作。

private Morphia morphia; 
private MongoClient mongoClient; 

morphia = new Morphia();
// Person is an entity object with Morphia annotations
morphia.map(Person.class);

// THESE properties MUST be read from environment variables in Spring BOOT.
final String host = "localhost";
final int port = 27017;

mongoClient = new MongoClient(host, port);

//Set database
// this instance would be autowired all data access classes
Datastore ds  = morphia.createDatastore(mongoClient, "dataStoreInstanceId");

// this is how instance would be used in those data accesses classes
Person p = ds.find(Person.class, "username", "john").get();

Spring 类似引导的方法是创建一个具有所需属性的自动配置,它创建一个 Datastore 作为 bean 的实例。

Reference Guide 中,您将找到如何设置属性和连接到 MongoDB。

Morphia 的自动配置可能如下所示:

@Configuration
public class MorphiaAutoConfiguration {

    @Autowired
    private MongoClient mongoClient; // created from MongoAutoConfiguration

    @Bean
    public Datastore datastore() {
        Morphia morphia = new Morphia();

        // map entities, there is maybe a better way to find and map all entities
        ClassPathScanningCandidateComponentProvider entityScanner = new ClassPathScanningCandidateComponentProvider(true);
        entityScanner.addIncludeFilter(new AnnotationTypeFilter(Entity.class));
        for (BeanDefinition candidate : scanner.findCandidateComponents("your.basepackage")) { // from properties?
            morphia.map(Class.forName(candidate.getBeanClassName()));
        }

        return morphia.createDatastore(mongoClient, "dataStoreInstanceId"); // "dataStoreInstanceId" may come from properties?
    }
}

然后您可以按照通常的方式在其他 Spring bean 中自动装配您的数据存储:

    @Autowired
    private Datastore datastore;

如果有些地方不正确或不清楚,请查看 Spring Boot 中现有的 *AutoConfiguration 类。

我正在为 spring 启动启动程序,这里是 repo. 非常容易使用,过几天会在 maven central 中更新它。