当前位置: 首页 > 知识库问答 >
问题:

Spring Boot可以在作为Servlet运行时连接到Cassandra但不能作为命令行运行

冉锋
2023-03-14
@Configuration
@SpringBootApplication
@EnableAutoConfiguration
@EnableCaching
@EnableScheduling
public class MyApplication extends SpringBootServletInitializer {

  @Override
  protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
    return application.sources(MyApplication.class);
  }

  public static void main(String[] args) {
    new MyApplication().configure(new SpringApplicationBuilder(MyApplication.class)).run(args);
  }
}
@Configuration
@SpringBootApplication
@EnableAutoConfiguration
public class MigrationRunner implements CommandLineRunner {

  @Autowired
  Session session;

  @Override
  public void run(String[] args)
  {
    MigrationResources mr = new MigrationResources();
    mr.addMigration(...);
    mr.addMigration(...);

    MigrationEngine.withSession(session).migrate(mr);
  }
}
// annotations
public class MyApplication extends SpringBootServletInitializer {

  private final static String MIGRATE_COMMAND = "migrate";

  @Override
  protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
    return application.sources(MyApplication.class);
  }

  public static void main(String[] args) {
    if (args.length > 0 && args[0].equalsIgnoreCase(MIGRATE_COMMAND)) {
      new SpringApplicationBuilder()
          .sources(MigrationRunner.class)
          .run(Arrays.copyOfRange(args, 1, args.length));
    } else {
      new MyApplication().configure(new SpringApplicationBuilder(MyApplication.class)).run(args);
    }
  }
}

问题是,当我使用migratearg执行此操作时,Spring会抛出以下错误:

创建名为“Migration Runner”的bean时出错:通过字段“session”表示的依赖项不满足

创建类路径资源[org/springframework/boot/autoconfigure/data/cassandra/cassandraDataautoconfiguration.class]中定义的名为“session”的bean时出错:调用init方法失败

共有1个答案

傅献
2023-03-14

你要做的就是,

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

你把申请弄得太复杂了。如果您运行myapplication.main,默认情况下它将在端口8080中运行。

额外的好处是,如果您需要从同一个开始。

@SpringBootApplication
public class MigrationRunner implements CommandLineRunner {

  @Autowired
  Session session;


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

  @Override
  public void run(String[] args)
  {
    MigrationResources mr = new MigrationResources();
    mr.addMigration(...);
    mr.addMigration(...);

    MigrationEngine.withSession(session).migrate(mr);
  }
}
 类似资料:
  • 我正在尝试将我的程序导出为一个可运行的JAR。该程序在eclipse中工作得非常好,但它不能作为一个可运行的JAR运行。我正在使用另外3个jar文件作为引用jar,这样我就可以使用音频,我认为这可能是问题所在。可运行的jar启动,但它只是一个全白的窗口,程序没有启动。 我点击我的项目,然后右键点击并选择“导出”,然后我选择“可运行的JAR”选项。我尝试使用所有三个处理引用库的选项来创建jar。 将

  • 我正在使用NetBeans IDE 8.2和Maven 3.5.0。当NetBeans的一个操作试图下载插件时,它会失败: 下载:https://repo.maven.apache.org/maven2/org/codehaus/mojo/xml-maven-plugin/1.0/xml-maven-plugin-1.0.pom 我在以下位置定义了代理: NetBeans:工具->选项->常规 C

  • 问题内容: 我最近打算测试从python作为命令行参数运行phantomJS,我还不了解它,但是看到了例子。因为PhantomJS是从命令行运行的,所以这似乎是可行的。PhantomJS吐出的结果将直接进入变量。 在我走这条路之前,在node.js中进行这项工作实际上对我来说更有用,这让我开始思考,当程序从命令行运行并存储数据结果时,我是否可以使用node来运行PhantomJS PhantomJ

  • 问题内容: 我遇到了一个非常奇怪的问题。我需要在Jenkins中配置代理,以便 能够访问其中一项作业的SVN存储库。我这样做有两种方式: 从命令行使用必需的参数启动Jenkins 在jenkins.xml文件中定义参数时,将Jenkins作为Windows服务启动。 Starting from command line : -Dhudson.model.DirectoryBrowserSuppor

  • 问题内容: 我们正在经历升级数据库软件的过程,还将从Tomcat 5.5升级到Tomcat7。结果,我使用的是新的JDBC驱动程序,在本例中为推荐的SQL Anywhere JDBC 4.0驱动程序,它需要ODBC服务。 我将其全部用于Eclipse方面取得了巨大的成功。但是奇怪的是,当我尝试在Eclipse之外运行Tomcat时,出现以下错误: 我 可以 得到一个纯Java驱动程序(jConne

  • 我使用的是kafka connect支持的以下mongo源代码。我发现mongo源代码的一个配置(从这里)是tasks.max。 这意味着我可以提供连接器tasks.max这是 如果它将创建多个连接器来侦听mongoDb更改流,那么我将最终得到重复的消息。那么,mongo真的具有并行性并作为集群工作吗?如果它有超过1个tasks.max?