我正在尝试从Microsoft Azure中托管的MySQL数据库中获取数据,而我的spring boot maven应用程序也部署在Azure中。
当我点击数据托管链接时,它会在Web浏览器上以JSON格式显示数据。例如 - https://xyz.azurewebsites.net/checklist以JSON格式显示数据。
另一端当我点击我的前端链接时,它会显示我的设计。例如 - https://xyz.azurewebsites.net/search.html显示HTML视图。
注意 - 这个完整的应用程序在本地服务器上工作正常// localhost / 3306。但是当我在Microsoft Azure上部署它时它运行不正常。一种不匹配的问题。
我在哪里犯错?
层次
|-Project
|-src/main/java
|-Controller
|-DAO
|-Entity
|-Main
|-Repository
|-Service
|-src/main/resources
|-Static
|- Search.html
|- Index.html
|-application.properties
的pom.xml
project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>CheckListMavenWebThree</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<!-- <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.7.RELEASE</version> </parent> -->
<dependencies>
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-
boot-starter-web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>1.4.7.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-jpa -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<version>1.4.7.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>6.0.6</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<version>1.5.6.RELEASE</version>
<scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>1.5.6.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.data/spring-data-envers -->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-envers</artifactId>
<version>1.1.6.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-envers -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-envers</artifactId>
<version>5.2.10.Final</version>
</dependency>
</dependencies>
<properties>
<java.version>1.8</java.version>
</properties>
<build>
<testSourceDirectory>src/main/test</testSourceDirectory>
<resources>
<resource>
<directory>src/main/resources</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</resource>
<!-- <resource> <directory>src/main/webapp</directory> <excludes> <exclude>**/*.java</exclude>
</excludes> </resource> -->
</resources>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>7</version>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.0.0</version>
</plugin>
</plugins>
</build>
Controller.java (能够在主机(Azure)上获取数据)
package com.example.Controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.http.MediaType;
import com.example.Entity.Checklist;
import com.example.Service.CheckListService;
@Controller
public class CheckListController {
@Autowired
private CheckListService checkListService;
@RequestMapping(value = "/checklist" , method = RequestMethod.GET)
@ResponseBody
public Object index() {
return checkListService.findAll();
}
App.js
var app = angular.module('myApp', [ 'ngResource' ]);
app.controller('CheckListController', [
'$scope',
'$resource',
function($scope, $resource) {
function fetchAllCheckList() {
$scope.CheckList =
$resource('http://localhost:8080/CheckListMavenWebThree/checklist')
.query(function(data) {
console.log(data);
$scope.Message = data;
return data;
});
};
fetchAllCheckList();
$scope.refresh = function() {
fetchAllCheckList();
console.log(fetchAllCheckList());
};
Search.html
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>CheckList</title>
<link rel="stylesheet" type="text/css" href="./css/right-panel.css">
</head>
<body ng-app="myApp" onload="javascript:closeNav()">
<div ng-controller="CheckListController" id="main">
<div >
<span style="font-size: 23px; cursor: pointer" onclick="openNav()">☰
Search</span>
</div>
<form name="checkListForm" id="main">
<table border="2" >
<tr>
<th>Site_Name</th>
<th>WSC_Serial_Number</th>
<th>CheckList_01</th>
<th>CheckList_02</th>
<th>CheckList_03</th>
<th>CheckList_04</th>
<th>CheckList_05</th>
<th>CheckList_06</th>
<th>CheckList_07</th>
<th>CheckList_08</th>
<th>CheckList_09</th>
<th>CheckList_10</th>
<th>CheckList_11</th>
<th>CheckList_12</th>
<th>CheckList_13</th>
<th>CheckList_14</th>
<th>Notes</th>
<th>Completed_By</th>
<th>Setup_Tech</th>
<th>Date</th>
</tr>
<div><label style="font-size:18px; font-family: "Lato", sans-serif;">Search: <input ng-model="search.$"></label><br><br>
<tr ng-repeat="row in CheckList | filter:search:strict">
<td><span ng-bind="row.site_Name"></span></td>
<td><span ng-bind="row.wsc_Serial_Number"></span></td>
<td><span ng-bind="row.checkList_01"></span></td>
<td><span ng-bind="row.checkList_02"></span></td>
<td><span ng-bind="row.checkList_03"></span></td>
<td><span ng-bind="row.checkList_04"></span></td>
<td><span ng-bind="row.checkList_05"></span></td>
<td><span ng-bind="row.checkList_06"></span></td>
<td><span ng-bind="row.checkList_07"></span></td>
<td><span ng-bind="row.checkList_08"></span></td>
<td><span ng-bind="row.checkList_09"></span></td>
<td><span ng-bind="row.checkList_10"></span></td>
<td><span ng-bind="row.checkList_11"></span></td>
<td><span ng-bind="row.checkList_12"></span></td>
<td><span ng-bind="row.checkList_13"></span></td>
<td><span ng-bind="row.checkList_14"></span></td>
<td><span ng-bind="row.notes"></span></td>
<td><span ng-bind="row.completed_By"></span></td>
<td><span ng-bind="row.setup_Tech"></span></td>
<td><span ng-bind="row.date"></span></td>
<td>
</tr>
</div>
</table>
<div id="mySidenav" class="sidenav" onmouseover="openNav()"
onmouseleave="closeNav()">
<!-- <a href="javascript:void(0)" class="closebtn" onclick="closeNav()">×</a> -->
<a href="search.html"> ⚲ Search</a> <a
href="createnew.html">© Create</a> <a href="update.html">♻ Update</a>
<a href="delete.html">☢ Delete</a>
<a href="earth.html">☢ Earth</a>
</div>
<span><button type="button" data-ng-click="refresh()" id="refresh">Refresh</button></span>
</div>
</form>
<script type='text/javascript' src="./js/rightpanel.js"></script>
<script type='text/javascript' src="./js/angular.min.js"></script>
<script type='text/javascript' src="./js/angular-resource.min.js"></script>
<script type='text/javascript' src="js/app.js"></script>
<link rel="stylesheet" href="./css/style.css">
<link rel="stylesheet" href="./css/theme-default.css">
<link rel="stylesheet" href="./css/theme-blue.css">
<link rel="stylesheet" href="./css/bootstrap.min.css">
Web.xml中
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<handlers>
<add name="httpPlatformHandler" path="*" verb="*"
modules="httpPlatformHandler" resourceType="Unspecified" />
</handlers>
<httpPlatform processPath="%JAVA_HOME%\bin\java.exe"
arguments="-Djava.net.preferIPv4Stack=true -
Dserver.port=%HTTP_PLATFORM_PORT% -jar "%HOME%\site\wwwroot\gs-spring-
boot-0.1.0.jar"">
</httpPlatform>
</system.webServer>
</configuration>
Application.properties (我天真,所以我刚学会并尝试实现。是否application.properties是正确的?它允许我将mysql与本地主机的azure连接)
spring.mvc.view.prefix=/static/js/
spring.mvc.view.suffix=.jsp
spring.datasource.url=jdbc:mysql://*****.mysql.database.azure.com:3306/*****? verifyServerCertificate=true&useSSL=true&requireSSL=false&serverTimezone=UTC
spring.datasource.username:*******@*******server
spring.datasource.password:*******
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# Keep the connection alive if idle for a long time (needed in production)
spring.datasource.testWhileIdle = true
spring.datasource.validationQuery = SELECT 1
# Show or not log for each sql query
spring.jpa.show-sql = true
# Hibernate ddl auto (create, create-drop, update)
spring.jpa.hibernate.ddl-auto = update
# Naming strategy
spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy
# Use spring.jpa.properties.* for Hibernate native properties (the prefix is
# stripped before adding them to the entity manager)
# The SQL dialect makes Hibernate generate better SQL for the chosen database
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect
logging.level.org.hibernate.SQL:debug
#naming convention according to me
spring.jpa.hibernate.naming.physical- strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
我做错了什么?是托管链接问题吗?
答案 0 :(得分:0)
根据您的描述,您的项目在本地运行良好,因此请考虑部署问题。
您可以按照official tutorials将spring-boot
项目部署到azure。
结合official tutorials中的步骤和您的实际情况,我提供了以下检查点:
第1点: 请使用mvn package
在pom.xml
文件所在的目录中建立JAR包。
第2点: 请确保web.config中配置的jar包名称与上传的jar包名称相同。
第3点:请使用FTP在KUDU上发布jar files
和web.config
到D:\home\site\wwwroot\
目录。
第4点: 请确保ApplicationSettings
与您的项目匹配,例如jdk version
,tomcat version
。
如果要部署war
文件,则需要在Azure门户上配置应用服务的ApplicationSettings,然后将war文件上传到路径D:\home\site\wwwroot\webapps
。
作为参考,请参阅下面的文件和主题。
1。Configure web apps in Azure App Service
2。Create a Java web app in Azure App Service
3。Deploying Springboot to Azure App Service
希望它对你有所帮助。