==
проверяет ссылки на объекты, .equals()
проверяет строковые значения.
Иногда кажется, что ==
сравнивает значения, потому что Java делает некоторые закулисные вещи, чтобы убедиться, что одинаковые строки в строке являются одним и тем же объектом.
Для Например:
String fooString1 = new String("foo");
String fooString2 = new String("foo");
// Evaluates to false
fooString1 == fooString2;
// Evaluates to true
fooString1.equals(fooString2);
// Evaluates to true, because Java uses the same object
"bar" == "bar";
Но будьте осторожны с нулями!
==
обрабатывает строки null
в порядке, но вызов .equals()
из пустой строки приведет к исключению:
String nullString1 = null;
String nullString2 = null;
// Evaluates to true
System.out.print(nullString1 == nullString2);
// Throws a NullPointerException
System.out.print(nullString1.equals(nullString2));
Итак, если вы знаете, что fooString1
может но не менее очевидно, что он проверяет значение null (из Java 7):
System.out.print(Objects.equals(fooString1, "bar"));
Вы можете проверить, не получен ли запрос, и попытаться отправить запрос на другой сервер, но что, если работает только четвертый сервер, и вам все время приходится совершать три неудачные попытки, чтобы достичь рабочего? Похоже, не самый эффективный способ.
Вместо этого я бы добавил балансировщик нагрузки NGinx с проверкой работоспособности: http://nginx.org/en/docs/http/load_balancing.html
Для моей вышеупомянутой проблемы я получил решение, как показано ниже, для этого мы должны получить помощь от JAVASCRIPT.
шаг 1: ->
создайте файл env.js в каталоге index.html, как показано ниже.
(function (window) {
window.__env = window.__env || {};
// API url
window.__env.apiUrl = "http://RestWebService";
// Whether or not to enable debug mode
// Setting this to false will disable console output
window.__env.enableDebug = true;
}(this));
Смысл вышеупомянутого файла env.js заключается только в том, что мы создаем одну глобальную переменную apiUrl для хранения URL нашего сервера. Так что мы можем получить доступ к этой переменной глобально. Затем мы добавляем элемент в раздел в нашем index.html для загрузки env.js до загрузки Angular:
<html>
<head>
<!-- Load environment variables -->
<script src="env.js"></script>
</head>
<body>
...
<!-- Angular code is loaded here -->
</body>
</html>
По умолчанию файлы JavaScript, такие как env.js, не копируются в выходной каталог когда мы создаем наше приложение.
Чтобы убедиться, что файл копируется в выходной каталог, когда мы запускаем ng build или ng serve, мы должны добавить его в раздел активов конфигурации сборки нашего приложения в angular.json:
angular. json file
{
"projects": {
"app-name": {
"architect": {
"build": {
"options": {
"assets": [
"src/favicon.ico",
"src/assets",
"src/env.js"
]
}
"configurations": {
"production": {
"fileReplacements": [
{
"replace": "src/environments/environment.ts",
"with": "src/environments/environment.prod.ts"
}
],
// ...
}
}
}
}
}
}
}
шаг 2: ->
Создайте один сервис на имя любого, в моем случае я создал его как env.service.ts в каталоге app.module .ts. это служебный файл, который будет использоваться для получения значения URL нашего сервера, который хранится в apiUrl (файл env.js).
env.service.ts
import { Injectable } from '@angular/core';
@Injectable({
providedIn: 'root'
})
export class EnvService {
// The values that are defined here are the default values that can
// be overridden by env.js
// API url
public apiUrl = '';
// Whether or not to enable debug mode
public enableDebug = true;
constructor() {
}
}
шаг 3: ->
Создать файл поставщика услуг в том же каталоге env.service.ts.
env.service.provider.ts
import { EnvService } from './env.service';
export const EnvServiceFactory = () => {
// Create env
const env = new EnvService();
// Read environment variables from browser window
const browserWindow = window || {};
const browserWindowEnv = browserWindow['__env'] || {};
// Assign environment variables from browser window to env
// In the current implementation, properties from env.js overwrite defaults from the EnvService.
// If needed, a deep merge can be performed here to merge properties instead of overwriting them.
for (const key in browserWindowEnv) {
if (browserWindowEnv.hasOwnProperty(key)) {
env[key] = window['__env'][key];
}
}
return env;
};
export const EnvServiceProvider = {
provide: EnvService,
useFactory: EnvServiceFactory,
deps: [],
};
EnvServiceProvider: -> Это угловой рецепт провайдера для регистрации EnvServiceFactory с внедрением угловой зависимости как фабрики для создания экземпляра EnvService.
EnvServiceFactory: -> Это фабрика, которая считывает значения среды из окна .__ env и создает экземпляр класса EnvService.
Таким образом, по всей сводке этого файла env.service.provider.ts мы экспортируем функцию EnvServiceFactory, которая создает экземпляр класса EnvService и копирует все значения из объекта window .__ env в экземпляр EnvService.
Наконец, чтобы зарегистрировать EnvServiceProvider как рецепт в системе внедрения зависимостей Angular, мы должны указать его в качестве провайдера в массиве провайдеров нашего приложения:
app.module.ts file
import { NgModule } from '@angular/core';
import { EnvServiceProvider } from './env.service.provider';
@NgModule({
imports: [ // ... ],
providers: [EnvServiceProvider],
})
export class AppModule {}
Теперь мы можем получить доступ к переменным среды из любого места нашего приложения, внедрив EnvService, я использую его, как показано ниже.
service.ts file
import { EnvService } from '../env.service';
constructor(private _httpClinet: HttpClient, private env: EnvService) {
}
emplLoginCheckUrl = this.env.apiUrl+"/checkValidUser";
validateUserDetails(employeeDetails): Observable<any> {
console.log(this.emplLoginCheckUrl);
return this._httpClinet.post(this.emplLoginCheckUrl, employeeDetails);
}
Вот и все для шага 3.
шаг 4: ->
наконец, что мы должны сделать перед обслуживанием приложения, мы должны собрать приложение с помощью ng build --prod, чтобы получить папку dist, которая содержит файл env.js. оттуда мы можем изменить наши URL, если вы измените URL, он автоматически применит новый измененный URL в нашем приложении.
ДЛЯ ПОЛУЧЕНИЯ ДОПОЛНИТЕЛЬНОЙ ИНФОРМАЦИИ посетите сайт ниже, спасибо Юргену Ван де Море.