有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

JavaSpring配置文件配置

我有一个名为“stage”的配置文件,我正在尝试实现一个web服务,但每当我提出请求时,我都会遇到一些错误,每当我删除配置文件注释时,它都能正常工作,我真的不知道为什么它不能与配置文件一起工作以下是一些类:

@SpringBootApplication
public class MyApp{

    public static void main(String[] args) {
         AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
          context.getEnvironment().setActiveProfiles("stage");
          context.register(MyApp.class);    
          SpringApplication.run(MyApp.class, args);

    }

}
@Profile("stage")
@Configuration
@PropertySource(value = { "classpath:jdbc.properties" })
public class StageDSConfig {

    @Value("${jdbc.driverClassName}")
    private String driverClassName;
    @Value("${jdbc.url}")
    private String jdbcURL;
    @Value("${jdbc.username}")
    private String username;
    @Value("${jdbc.password}")
    private String password;

    @Bean
    public static PropertySourcesPlaceholderConfigurer placeHolderConfigurer() {
        return new PropertySourcesPlaceholderConfigurer();
    }

    @Bean
    public DataSource dataSource() {

        BasicDataSource dataSource = new BasicDataSource();
        dataSource.setDriverClassName(driverClassName);
        dataSource.setUrl(jdbcURL);
        dataSource.setUsername(username);
        dataSource.setPassword(password);
        DatabasePopulatorUtils.execute(createDatabasePopulator(), dataSource);
        return dataSource;
    }

    private DatabasePopulator createDatabasePopulator() {
        ResourceDatabasePopulator databasePopulator = new ResourceDatabasePopulator();
        databasePopulator.setContinueOnError(true);
        databasePopulator.addScript(new ClassPathResource("schema-mysql.sql"));
        databasePopulator.addScript(new ClassPathResource("data-mysql.sql"));
        return databasePopulator;
    }
}
@EnableWs
@Configuration
public class WebServiceConfig extends WsConfigurerAdapter {

    @Bean
    public ServletRegistrationBean messageDispatcherServlet(ApplicationContext applicationContext) {
        MessageDispatcherServlet servlet = new MessageDispatcherServlet();
        servlet.setApplicationContext(applicationContext);

        servlet.setTransformWsdlLocations(true);
        return new ServletRegistrationBean(servlet, "/ws/*");
    }

    @Bean(name = "ws")
    public DefaultWsdl11Definition defaultActionWsdl11Definition(XsdSchema actionSchema) {
        DefaultWsdl11Definition wsdl11Definition = new DefaultWsdl11Definition();
        wsdl11Definition.setPortTypeName("ActionPort");
        wsdl11Definition.setLocationUri("/ws");
        wsdl11Definition.setTargetNamespace("http://www.example.com/ws");
        wsdl11Definition.setSchema(actionSchema);
        return wsdl11Definition;
    }

    @Bean
    public XsdSchema wsSchema() {
        return new SimpleXsdSchema(new ClassPathResource("ws.xsd"));
    }

}

这是错误日志:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
   <SOAP-ENV:Header/>
   <SOAP-ENV:Body>
      <SOAP-ENV:Fault>
         <faultcode>SOAP-ENV:Server</faultcode>
         <faultstring xml:lang="en">PreparedStatementCallback; bad SQL grammar [INSERT INTO logs(ipAddress,actionn,requestBody) values(?,?,?)]; nested exception is java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: LOGS</faultstring>
      </SOAP-ENV:Fault>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

共 (2) 个答案

  1. # 1 楼答案

    我相信您没有正确激活配置文件。使用springBoot,您可以如下设置配置文件:

    new SpringApplicationBuilder(MyApp.class).profiles("stage").run(args);
    

    或者,通过环境变量:

    System.setProperty(AbstractEnvironment.ACTIVE_PROFILES_PROPERTY_NAME, "stage");
    SpringApplication.run(MyApp.class, args);
    
  2. # 2 楼答案

    我认为问题在于您实际上没有激活“stage”概要文件,因此上下文缺少StageDSConfig类中的所有bean,因此没有创建任何模式