我有一个Spring Boot项目,在IDE中运行时效果非常好。我想通过AWS CodeStar运行这个。不幸的是,CodeStar创建的默认Spring模板使用Spring MVC。
我不能用我的Spring Boot项目覆盖默认的Spring MVC项目(它不起作用)。例如,我可以将我的一些资源复制到MVC项目中index.html这是可行的。但是像Thymeleaf这样的功能不起作用。出于这个和其他原因,我想将提供的Spring MVC更改为我已经拥有的Spring Boot结构。
我按照这里的指示:https://www.baeldung.com/spring-boot-migration
不幸的是,这没有帮助。我可以创建应用程序入口点并添加Spring Boot依赖项,而不会中断应用程序。但是当我删除默认依赖项或与MVC关联的配置时,应用程序会中断。当试图到达网址时,我得到一个带有描述的404错误:
源服务器没有找到目标资源的当前表示形式,或者不愿意透露目标资源是否存在。
调试此错误消息(例如。https://www.codejava.net/java-ee/servlet/solved-tomcat-error-http-status-404-not-found)没用。
该消息似乎已连接到web资源。我在文件夹资源和webapp/resources中都有我的web资源。Spring Boot不需要任何位置配置,对吗?默认情况下,它使用此位置。
有人能告诉我要删除什么,要添加什么才能使用我现有的Spring Boot项目吗?
编辑:
这是指向AWS CodeStar Spring web应用程序默认模板的链接:https://github.com/JanHorcicka/AWS-codestar-template
这是我的Spring Boot项目结构:
我意识到,您之前曾表示,您尝试使用Spring Boot项目,但做了一些修改,但没有成功,但我认为实际上有可能在AWS CodeStar上成功部署您的应用程序,这将是我的建议。
我还意识到,在你的屏幕截图中,你包含了几个必需的工件和类,但请仔细检查,当你将应用程序部署到AWS CodeStar时,是否遵循了这些步骤。
让我们从本地运行的Spring Boot项目的原始版本开始,不做任何修改,然后执行以下更改。
首先,如您共享的GitHub链接所示,请确保您的项目中包含以下文件。AWS部署架构体系需要它们:
appspec。yml
buildspec。yml
模板。yml
模板配置。json
脚本
目录请根据您的具体需求调整任何必要的配置,尤其是,模板配置。json
。
然后,在您的pom.xml
中执行以下修改。其中一些是Spring Boot作为传统部署工作所必需的,另一些是AWS CodeStar中部署所必需的。
请确保将包装
指示为war
:
<packaging>war</packaging>
为了确保嵌入式servlet容器不会干扰war文件部署到的Tomcat,可以按照上述文档中的建议将Tomcat依赖项标记为已提供:
<dependencies>
<!-- … -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<!-- … -->
</dependencies>
或者在pom中排除Tomcat依赖项。xml
:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclushtml" target="_blank">ions>
</dependency>
如果有必要,可以使用某种允许您在本地和外部servlet容器中同时启动Spring boot的配置文件来应用这种排除。
接下来,参数化maven war插件以符合AWS CodeStar部署需求:
<build>
<pluginManagement>
<plugins>
<!-- ... -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.2</version>
<configuration>
<warSourceDirectory>src/main/webapp</warSourceDirectory>
<warName>ROOT</warName>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
<!-- ... -->
<plugins>
</pluginManagement>
</build>
我不认为有必要,但只是为了避免任何问题,调整您的最终代码<代码>
<finalName>ROOT</finalName>
最后,正如Spring留档所指出的,请确保您的MyProjectApplication
-我假设这个类是您的主要切入点子类SpringBootServletSynalizer
,并相应地重写配置
,如:
@SpringBootApplication
public class MyProjectApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(MyProjectApplication.class);
}
public static void main(String[] args) {
SpringApplication.run(MyProjectApplication.class, args);
}
}
请随时根据您的具体用例调整课程。
通过这种设置,尝试部署应用程序,看看它是否有效:也许您可以发现某种库依赖性问题,但我认为在大多数情况下,它应该可以正常工作。
在第一步中,您可以尝试在本地部署应用程序的版本,稍后将按照您在项目模板中提供的说明部署到AWS CodeStar,基本上,在配置了答案中描述的必要更改后,通过运行:
mvn clean package
并在本地tomcat环境中部署生成的war。请注意,可能ROOT
应用程序已经存在于标准tomcat安装中(您可以通过检查webapps
文件夹来验证它):您可以覆盖该war文件。
对于本地测试,您甚至可以选择不同的应用程序名称(配置build.finalName
和pom.xml
文件中的warName
):重要的是验证应用程序是否在本地成功运行。
如果愿意,您可以选择将应用程序直接部署到AWS CodeStar,并在必要时检查日志。
在任何情况下,请注意两件事:一方面,如果您的应用程序中配置了任何绝对路径,这可能是您在评论中提到的404
问题的原因。请注意,您的应用程序将部署在Tomcat中,其上下文根为“/”。
另一方面,回顾一下如何配置数据库访问。可能您使用了应用程序。属性
,这很好,但请注意,在使用应用程序时,数据库必须是可访问的:可能Spring无法创建必要的数据源,以及与之相关的持久性管理器或相关内容,因此,应用程序无法启动。同样,这可能是404
错误代码的原因。
为了简化数据库连接,对于测试,乍一看,我建议您使用简单的属性来配置数据源,即驱动程序类、连接字符串、用户名和密码。如果该设置工作正常,您可以稍后启用JNDI或其他必要的设置。
请记住,如果您需要更改上下文名称和/或在Tomcat中定义数据源池,您可以在Web应用根目录中的META-INF
目录下放置一个context.xml
文件。
这个context.xml
看起来应该类似于:
<?xml version="1.0" encoding="UTF-8"?>
<Context path="/">
<Resource name="jdbc/myDS"
type="javax.sql.DataSource"
maxActive="100"
maxIdle="30"
maxWait="10000"
url="jdbc:mysql://localhost:3306/myds"
driverClassName="com.mysql.jdbc.Driver"
username="root"
password="secret"
/>
</Context>
问题内容: 我从SVN中签出了一个项目,但未指定项目类型,因此它作为“默认”项目签出。快速将其转换为“ Java”项目的最简单方法是什么? 我正在使用Eclipse版本3.3.2。 问题答案: **打开.project文件,然后添加Java性质和构建器。 在.classpath中,引用Java库: **
首先,我使用的是Ubuntu12.04,Eclipse Juno和maven 3.0.4(m2eclipse),我必须在一个从SVN存储库中获得的遗留项目中工作。
问题内容: 我在Eclipse上使用maven2创建了一个项目。添加hibernate-annotations依赖项后,我尝试使用hibernate注释(@ Entity,@ Table …)创建一个类,但这给了我这个错误: 将项目合规性和JRE更改为1.5 我已修复它,但只要我的jdk为1.6,就无法理解为什么需要此设置。 预先感谢! 问题答案: 检查maven编译器插件的设置是否也设置为1.5
因此,我有一个标准的,它获取帖子列表并向用户显示。我的问题是,当用户进入活动时,我希望能够将焦点更改为特定的帖子。 例如,用户A看到他收到一个通知,表示有人喜欢他/她的帖子。他/她单击该通知,它将加载用户帖子的活动,然后焦点将更改为用户喜欢的帖子的位置。 我使用意图将传递给活动。然后,我运行,并尝试查看帖子的ID是否与我通过intent发送的
我想能够调试我的ASP。NET MVC应用程序在本地主机以外的域以及任何子域上,换句话说: http://domain.devhttp://*。领域发展 我尝试了以下方法: 修改主机文件 为*添加主机记录。领域返回127.0.0.1的开发人员 更改项目属性中的“项目Url” 然而,什么都不起作用。当我开始调试时,我得到一个页面,上面写着“服务不可用”或“无效的网址”。 我错过了什么? p、 我正在
在选择我的treeview时遇到问题。其思想是,用户单击该项,然后将数据添加到他们选择的节点下 似乎所选项目是一个文本块,我似乎找不到一种方法将其作为treeview项目来添加节点。 是的,我对这种编程很陌生。 感谢您提供的任何帮助。