春季启动数据控制台应用程序

huangapple go评论72阅读模式
英文:

Spring Boot Data console application

问题

以下是您要翻译的内容:

我将创建一个Java控制台应用程序,用于访问数据库(MySQL)。我将使用Spring Boot/Spring Data JPA。创建使用Spring Boot的控制台应用程序的正确方法是什么?

我发现有几种方法可以做到这一点:

  • 在application.properties中添加 spring.main.web-application-type=NONE
  • 在application.properties中添加 spring.main.web-environment=false
  • 使用Spring Shell项目
  • 实现CommandLineRunner接口

我想其中一些方法可能已经过时,各有利弊。您能否解释如何使用Spring Boot/Spring Data创建纯控制台应用程序?

英文:

I'm gonna create a Java console application for accessesing a database (MySQL). I'm gonna use Spring Boot/Spring Data JPA. What is the correct way to create a console application using Spring Boot?

I found a few ways to do this:

  • spring.main.web-application-type=NONE (in application.properties)
  • spring.main.web-environment = false (in application.properties)
  • using the Spring Shell project
  • implementing the CommandLineRunner interface

I suppose that some of them may be obsolete, have pros and cons. Could you please explain how to create a plain console application using Spring Boot/Spring Data?

答案1

得分: 1

最近,我已经完成了一个控制台应用程序,就像您现在需要的那样。我是通过实现CommandLineRunner接口来实现的。当Spring Boot启动应用程序时,它会调用CommandLineRunner接口的run(String... args)方法。
因此,您可以在这个实现类(例如:AppRunner)中自动装配(或使用构造函数注入)Spring数据存储库,并调用数据库操作。

与MySQL数据库不同,我使用了MongoDB,并进行了一些缓存操作。

示例:

AppRunner.java

package com.cache.caching;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;

@Component
public class AppRunner implements CommandLineRunner {

    Logger logger = LoggerFactory.getLogger(AppRunner.class);

    BookRepository bookRepository;

    public AppRunner(BookRepository bookRepository) {
        this.bookRepository = bookRepository;
    }

    @Override
    public void run(String... args) throws Exception {
        logger.info("articles fetching..." + bookRepository.getArticles());
        logger.info("articles fetching..." + bookRepository.getArticles());
        logger.info("articles fetching..." + bookRepository.getArticles());
        logger.info("articles fetching..." + bookRepository.getArticles());
    }
}

BookRepository.java

package com.cache.caching;

import java.net.UnknownHostException;
import java.util.List;

public interface BookRepository {
    List<Article> getArticles() throws UnknownHostException;
}

BookRepositoryImpl.java

package com.cache.caching;

import com.mongodb.*;
import org.bson.codecs.pojo.annotations.BsonId;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.data.mongodb.MongoCollectionUtils;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;
import java.util.function.Consumer;

@Component
public class BookRepositoryImpl implements BookRepository {

    @Override
    @Cacheable("articles")
    public List<Article> getArticles() throws UnknownHostException {

        MongoClient mongoClient
                = new MongoClient(new MongoClientURI("mongodb://localhost:27017"));
        DB db = mongoClient.getDB("Mart");
        DBCollection collection =  db.getCollection("articles");
        DBCursor cursor = collection.find();
        List<Article> list= new ArrayList<>();
        while (cursor.hasNext()) {
           Article article = new Article();
           DBObject dbObject = cursor.next();
           article.setId((Double) dbObject.get("_id"));
           article.setSubject((String) dbObject.get("subject"));
           list.add(article);
        }
        return list;
    }

}

在您的情况下,您可以在application.ymlapplication.properties文件中提供MySQL数据库连接详细信息。

CachingApplication.java - 应用程序从这里开始,这里的SpringApplication.run(CachingApplication.class, args);调用了CommandLineRunner接口的run(String... args)方法。

package com.cache.caching;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;

@SpringBootApplication
@EnableCaching
public class CachingApplication {

    public static void main(String[] args) {
        SpringApplication.run(CachingApplication.class, args);
    }

}

示例:示例完整代码在这里

英文:

Recently, I have done a console application, as you require now. I did that by implementing CommandLineRunner interface. When spring boot starts the application, it will invoke the run(String... args) method of CommandLineRunner interface.
So, you can autowire(or using constructor injection) spring data repositories in this implemention class(e.g. AppRunner) & invoke database operations.

Instead of MySql database, I have you used MongoDB along with some caching operations.

Example:

AppRunner.java

package com.cache.caching;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;

@Component
public class AppRunner implements CommandLineRunner {

    Logger logger = LoggerFactory.getLogger(AppRunner.class);

    BookRepository bookRepository;

    public AppRunner(BookRepository bookRepository) {
        this.bookRepository = bookRepository;
    }

    @Override
    public void run(String... args) throws Exception {
        logger.info(&quot;articles fetching...&quot;+bookRepository.getArticles());
        logger.info(&quot;articles fetching...&quot;+bookRepository.getArticles());
        logger.info(&quot;articles fetching...&quot;+bookRepository.getArticles());
        logger.info(&quot;articles fetching...&quot;+bookRepository.getArticles());
    }
}

BookRepository.java

package com.cache.caching;


import java.net.UnknownHostException;
import java.util.List;

public interface BookRepository {
    List&lt;Article&gt; getArticles() throws UnknownHostException;
}

BookRepositoryImpl.java

package com.cache.caching;

import com.mongodb.*;
import org.bson.codecs.pojo.annotations.BsonId;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.data.mongodb.MongoCollectionUtils;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;
import java.util.function.Consumer;

@Component
public class BookRepositoryImpl implements BookRepository{

    @Override
    @Cacheable(&quot;articles&quot;)
    public List&lt;Article&gt; getArticles() throws UnknownHostException {
       
        MongoClient mongoClient
                = new MongoClient(new MongoClientURI(&quot;mongodb://localhost:27017&quot;));
        DB db = mongoClient.getDB(&quot;Mart&quot;);
        DBCollection collection =  db.getCollection(&quot;articles&quot;);
        DBCursor cursor = collection.find();
        List&lt;Article&gt; list= new ArrayList&lt;&gt;();
        while (cursor.hasNext()) {
           Article article = new Article();
           DBObject dbObject = cursor.next();
           article.setId((Double) dbObject.get(&quot;_id&quot;));
           article.setSubject((String) dbObject.get(&quot;subject&quot;));
           list.add(article);
        }
        return list;
    }
    
}

In your case, you can provide MySQL database connection details here in application.yml / application.properties file.

CachingApplication.java - application starts here, this SpringApplication.run(CachingApplication.class, args); invokes the run(String... args) method of CommandLineRunner interface.

package com.cache.caching;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;

@SpringBootApplication
@EnableCaching
public class CachingApplication {

	public static void main(String[] args) {
		SpringApplication.run(CachingApplication.class, args);
	}

}

Sample: Sample Full Example Here

huangapple
  • 本文由 发表于 2020年9月4日 20:43:34
  • 转载请务必保留本文链接:https://go.coder-hub.com/63741435.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定