热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SpringBoot应用程序可以通过Maven运行,但不能通过IDEIntellijIDEA运行

如何解决《SpringBoot应用程序可以通过Maven运行,但不能通过IDEIntellijIDEA运行》经验,为你挑选了1个好方法。

我有一个弹簧启动应用程序,通过Maven的mvn spring-boot:run命令运行良好.但是,当我尝试通过IDE(在我的情况下是Intellij IDEA 2017.2.1)中运行它时,它失败了,因为它不能@Autowire是数据源.

***************************
APPLICATION FAILED TO START
***************************

Description:

Parameter 0 of constructor in com.myApp.Application required a bean of type 'javax.sql.DataSource' that could not be found.


Action:

Consider defining a bean of type 'javax.sql.DataSource' in your configuration.

这个代码库的原始作者有主类,它启动应用程序,接受数据源的构造函数参数,这是我不熟悉的方法,因为我习惯于通过application.properties文件执行它并让Spring Boot连接它自己的数据源.

@EnableTransactionManagement
@SpringBootApplication
@EnableCaching
public class Application extends JpaBaseConfiguration {


    protected Application(DataSource dataSource, JpaProperties properties,
            ObjectProvider jtaTransactionManagerProvider,
            ObjectProvider transactionManagerCustomizers) {
        super(dataSource, properties, jtaTransactionManagerProvider, transactionManagerCustomizers);
    }

在IDEA中,我注意到这个构造函数datasourceproperties参数和红色下划线.对于datasourceIDE的抱怨两个豆存在,它不知道这之间自动装配XADataSourceAutoConfiguration.classDataSourceConfiguration.class.至于以红色加下划线的构造的另一个参数properties,它找不到任何bean,IDE抱怨没有JpaProperties找到类型的bean .以下是在主应用程序启动器类中重写的一些其他方法,

        @Override
        protected AbstractJpaVendorAdapter createJpaVendorAdapter() {
            return new HibernateJpaVendorAdapter();
        }


        @Override
        protected Map getVendorProperties() {
            Map vendorProperties = new LinkedHashMap<>();
            vendorProperties.putAll(getProperties().getHibernateProperties(getDataSource()));
            return vendorProperties;
        }


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


}

不幸的是,因为我不熟悉使用构造函数在Spring Boot中配置/自动配置应用程序的方法,我不确定一些事情,但我的确切问题是为什么应用程序与Maven运行良好但不在Intellij IDEA?此外,由于我无法访问这个专有代码库的原作者,我很想知道为什么,如果有人甚至可以给我一个提示,他们已经配置了构造函数,而不是默认的自动配置.我也有一个集成测试,我写的,我尝试运行,但这个测试中,无论是通过IDE或通过Maven的故障安全插件运行也会导致同样的错误与DataSource不为@Autowired.所以这是另一个问题,为什么这个测试在主应用程序将不会通过Maven运行.这是我的集成测试,

@RunWith(SpringJUnit4ClassRunner.class)
@WebMvcTest(value = TransactionController.class, secure = false)
public class TransactionControllerIT {

    @Autowired
    MockMvc mockMvc;

    @Test
    public void shouldInitiateTransfer() {

        String transferTransaction =
              "some json string I can't show here on stack overflow";

        RequestBuilder requestBuilder = MockMvcRequestBuilders
                .post("/begin-transfer")
                .accept(MediaType.APPLICATION_JSON).content(transferTransaction)
                .contentType(MediaType.APPLICATION_JSON);

        MvcResult result = null;

        try {
            result = mockMvc.perform(requestBuilder).andReturn();
        } catch (Exception e) {
            fail("Exception in integration test!");
        }

        MockHttpServletResponse respOnse= result.getResponse();

        assertEquals(HttpStatus.CREATED.value(), response.getStatus());

    }
}

感谢您阅读我的问题.



1> spekdrum..:

您可以轻松地从IDEA运行任何Spring Boot应用程序,执行以下操作:

在此输入图像描述

在Maven面板中,转到插件,展开弹簧启动并右键单击"spring-boot:run".然后单击"创建您的项目......",如图所示.

这样,您就可以从主工具栏中的IDEA以一种舒适的方式启动应用程序:

在此输入图像描述

这样你仍然使用maven方式,但集成在IDEA中.我真的不知道你为什么会遇到这些问题.尝试直接执行spring boot app时,我也遇到了一些问题.


推荐阅读
author-avatar
炙天痕_953
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有