从第三方Java应用程序启动Spring Boot应用程序

时间:2019-09-10 16:05:24

标签: spring spring-boot

我正在使用SQL Server Language扩展功能来将SQL Server调用到Spring Boot应用程序中。

如本tutorial中所述,我使用扩展了AbstractSqlServerExtensionExecutor的类来调用存储过程:

EXEC sp_execute_external_script
  @language = N'Java'
, @script = N'com.example.Sample'
, @input_data_1 = @query
, @params = N'@regexExpr nvarchar(200)'
, @regexExpr = @expr
with result sets ((ID int, text nvarchar(100)));

然后,SQL Server使用其自己的Java应用程序(称为Launchpad)实例化com.example.Sample,然后调用Sample的init方法及其后的execute方法。

但是,com.example.Sample在启动JAR中。因此,Launchpad在类路径上找不到它。这是因为启动JAR在/BOOT-INF/classes文件夹中有它。我不能告诉SQL Server使用org.springframework.boot.loader.JarLauncher,因为@script必须是AbstractSqlServerExtensionExecutor

要解决此问题,我使用shadow创建了一个非引导uber jar。这样,Sample.class位于/com/example/的jar中,并且Launchpad可以找到它。然后,我可以在Sample的构造函数中启动我的Spring应用程序:

public class Sample extends AbstractSqlServerExtensionExecutor {

    public Sample() {
        executorExtensionVersion = SQLSERVER_JAVA_LANG_EXTENSION_V1;
        executorInputDatasetClassName = PrimitiveDataset.class.getName();
        executorOutputDatasetClassName = PrimitiveDataset.class.getName();

        Main.main(new String[] {});

    }
    ...
}

@SpringBootApplication
public class Main {

    public static void main(String[] args) {
        new SpringApplicationBuilder(Main.class)
        .web(WebApplicationType.NONE)
        .run(args);
    }
}

这将以Spring Boot应用程序启动我的应用程序,但找不到位于jar根目录的application.yml文件。

如何从另一个应用程序(在本例中为SQL Server的Launchpad)正确运行Spring Boot应用程序的应用程序属性?特别是,我需要使用application.yml中定义的属性来启动Spring Boot应用程序。

0 个答案:

没有答案