我正在从Spring 2.5迁移到Spring 3.
他们介绍了<mvc:annotation-driven />哪些黑魔法.这应该只在servlet配置文件中声明.
在Spring 2.5中,我刚刚使用<context:annotation-config />和<context:component-scan base='...'/>标记声明application-context.xml和调度程序servlet配置XML以及适当的基础包进行扫描.
所以,我不知道是什么样的区别mvc:annotation-driven,并context:annotation-config在servlet配置标签和我有什么可以消除在春季3配置文件?
我无法让我的Spring-boot项目提供静态内容.
我已经放在一个命名的文件夹static下src/main/resources.在里面我有一个名为的文件夹images.当我打包应用程序并运行它时,它找不到我放在该文件夹上的图像.
我试图把静态文件中public,resources并META-INF/resources但没有任何工程.
如果我jar -tvf app.jar我可以看到文件在右侧文件夹的jar内:
/static/images/head.png例如,但是调用:http://localhost:8080/images/head.png,我得到的只是一个404
有什么想法为什么spring-boot没有找到这个?(我使用的是1.1.4 BTW)
我正在使用Spring Framework 4.0.7,以及MVC和Rest
我可以和平地工作:
@Controller ResponseEntity<T>例如:
@Controller
@RequestMapping("/person")
@Profile("responseentity")
public class PersonRestResponseEntityController {
Run Code Online (Sandbox Code Playgroud)
用这个方法(只是为了创建)
@RequestMapping(value="/", method=RequestMethod.POST)
public ResponseEntity<Void> createPerson(@RequestBody Person person, UriComponentsBuilder ucb){
logger.info("PersonRestResponseEntityController - createPerson");
if(person==null)
logger.error("person is null!!!");
else
logger.info("{}", person.toString());
personMapRepository.savePerson(person);
HttpHeaders headers = new HttpHeaders();
headers.add("1", "uno");
//http://localhost:8080/spring-utility/person/1
headers.setLocation(ucb.path("/person/{id}").buildAndExpand(person.getId()).toUri());
return new ResponseEntity<>(headers, HttpStatus.CREATED);
}
Run Code Online (Sandbox Code Playgroud)
返回一些东西
@RequestMapping(value="/{id}", method=RequestMethod.GET)
public ResponseEntity<Person> getPerson(@PathVariable Integer id){
logger.info("PersonRestResponseEntityController - getPerson - id: {}", id);
Person person = personMapRepository.findPerson(id);
return new ResponseEntity<>(person, HttpStatus.FOUND);
}
Run Code Online (Sandbox Code Playgroud)
工作良好
我可以这样做:
@RestController(我知道它与@Controller+ …我知道这个问题有点开放,但我一直在考虑使用Scala/Lift作为Java/Spring的替代品,我想知道Scala/Lift对它有什么真正的优势.从我的观点和经验来看,Java Annotations和Spring确实最大限度地减少了您为应用程序所做的编码量.Scala/Lift会改进吗?
在Spring CrudRepository中,我们是否支持字段的"IN子句"?即类似于以下内容?
findByInventoryIds(List<Long> inventoryIdList)
Run Code Online (Sandbox Code Playgroud)
如果没有这样的支持,可以考虑哪些优雅的选择?针对每个id的触发查询可能不是最佳的.
我试图以编程方式设置Spring Boot应用程序上下文根.上下文根的原因是我们希望从中访问应用程序localhost:port/{app_name}并将所有控制器路径附加到它.
这是web-app的应用程序配置文件.
@Configuration
public class ApplicationConfiguration {
Logger logger = LoggerFactory.getLogger(ApplicationConfiguration.class);
@Value("${mainstay.web.port:12378}")
private String port;
@Value("${mainstay.web.context:/mainstay}")
private String context;
private Set<ErrorPage> pageHandlers;
@PostConstruct
private void init(){
pageHandlers = new HashSet<ErrorPage>();
pageHandlers.add(new ErrorPage(HttpStatus.NOT_FOUND,"/notfound.html"));
pageHandlers.add(new ErrorPage(HttpStatus.FORBIDDEN,"/forbidden.html"));
}
@Bean
public EmbeddedServletContainerFactory servletContainer(){
TomcatEmbeddedServletContainerFactory factory = new TomcatEmbeddedServletContainerFactory();
logger.info("Setting custom configuration for Mainstay:");
logger.info("Setting port to {}",port);
logger.info("Setting context to {}",context);
factory.setPort(Integer.valueOf(port));
factory.setContextPath(context);
factory.setErrorPages(pageHandlers);
return factory;
}
public String getPort() {
return port;
}
public void setPort(String port) {
this.port = …Run Code Online (Sandbox Code Playgroud) 我们正在开发一个Spring Boot Web应用程序,我们使用的数据库是MySql ;
我们的设置是我们首先在本地测试它(意味着我们需要在我们的PC上安装MySql);
然后我们推向Bitbucket ;
Jenkins自动检测到对Bitbucket的新推送并对其进行构建(对于Jenkins mvn构建要通过,我们还需要在运行Jenkins的虚拟机上安装MySql).
如果Jenkins构建了传递,我们将代码推送到OpenShift上的应用程序(使用Jenkins上的Openshift部署插件).
我们可能已经弄明白的问题是:
在application.properties我们不能硬编码MySql信息.由于我们的项目将在3个不同的地方运行(本地,Jenkins和OpenShift),我们需要使数据源字段动态化application.properties(我们知道有不同的方法,但我们现在正在研究这个解决方案).
spring.datasource.url =
spring.datasource.username =
spring.datasource.password =
Run Code Online (Sandbox Code Playgroud)我们提出的解决方案是在本地和Jenkins vm中创建系统环境变量(以与OpenShift命名的方式命名它们)并分别为它们分配正确的值:
export OPENSHIFT_MYSQL_DB_HOST="jdbc:mysql://localhost"
export OPENSHIFT_MYSQL_DB_PORT="3306"
export OPENSHIFT_MYSQL_DB_USERNAME="root"
export OPENSHIFT_MYSQL_DB_PASSWORD="123asd"
Run Code Online (Sandbox Code Playgroud)
我们做到了这一点并且有效.我们还检查Map<String, String> env = System.getenv();过环境变量可以变成java变量:
String password = env.get("OPENSHIFT_MYSQL_DB_PASSWORD");
String userName = env.get("OPENSHIFT_MYSQL_DB_USERNAME");
String sqlURL = env.get("OPENSHIFT_MYSQL_DB_HOST");
String sqlPort = env.get("OPENSHIFT_MYSQL_DB_PORT");
Run Code Online (Sandbox Code Playgroud)
现在唯一剩下的就是我们需要在我们中使用这些java变量application.properties,这就是我们遇到的问题.
在哪个文件夹,以及我们如何,需要分配password,userName, …
我是Web编程的新手,特别是在Java中,所以我只是学习了标题和正文.
我正在使用Spring MVC编写RESTful服务.我能够@RequestMapping在我的控制器中创建简单的服务.我需要帮助了解如何从我的REST服务控制器中的方法请求中获取HTTP头信息.我想解析标题并从中获取一些属性.
你能解释我如何获取这些信息吗?
我正在尝试删除白标错误页面,所以我所做的是为"/ error"创建了一个控制器映射,
@RestController
public class IndexController {
@RequestMapping(value = "/error")
public String error() {
return "Error handling";
}
}
Run Code Online (Sandbox Code Playgroud)
但现在我收到了这个错误.
Exception in thread "AWT-EventQueue-0" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'requestMappingHandlerMapping' defined in class path resource [org/springframework/web/servlet/config/annotation/DelegatingWebMvcConfiguration.class]: Invocation of init method failed; nested exception is java.lang.IllegalStateException: Ambiguous mapping found. Cannot map 'basicErrorController' bean method
public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletR equest)
to {[/error],methods=[],params=[],headers=[],consumes=[],produces=[],custom=[]}: There is already 'indexController' bean method
Run Code Online (Sandbox Code Playgroud)
不知道我做错了什么.请指教.
编辑:
已经添加
error.whitelabel.enabled=false 到application.properties文件中,仍然会收到相同的错误
我想知道在应用程序启动之前加载初始数据库数据的最佳方法是什么?我正在寻找的东西将使我的H2数据库充满数据.
例如,我有一个域模型"用户"我可以通过转到/ users来访问用户,但最初在数据库中不会有任何用户,所以我必须创建它们.反正有没有自动填充数据库?
目前我有一个容器实例化的Bean,并为我创建用户.
例:
@Component
public class DataLoader {
private UserRepository userRepository;
@Autowired
public DataLoader(UserRepository userRepository) {
this.userRepository = userRepository;
LoadUsers();
}
private void LoadUsers() {
userRepository.save(new User("lala", "lala", "lala"));
}
}
Run Code Online (Sandbox Code Playgroud)
但我非常怀疑这是最好的方法.或者是吗?
spring ×10
spring-mvc ×6
java ×4
spring-boot ×4
spring-3 ×2
spring-data ×2
http ×1
jpa ×1
lift ×1
mysql ×1
openshift ×1
rest ×1
scala ×1
spring-4 ×1